我定义了
class A<T>{}
class B{}
B b = new B();
希望产生这样的效果
A<B> a = new A<B>();
但是要让上面这条语句具有普遍适用性,我希望改成下面这样
A<b.getClass()> a = new A<b.getClass()>();
即对任何类型(B、C、D……),上面的语句都能成立
实际中,在b.getClass()中却发生错误,不能调用getClass()函数。
请问应该如何解决?
非常感谢!
T要求的是定义的类型,不能是类的实例,你调用getClass方法,会返回一个Class类的实例,当让会报错了。
另外
class A<T>{}这种模式本身就支持 A<B>,A<C>,A<D>,A<...>等等等,你为什么要改呢?
在不同的源文件中,有如下实例:
B b = new B();
C b = new C();
我希望让这一条语句可以分别实现上述两个的泛型,而不用改代码,类似于
A a = new A();
在第一个源文件中实现的就是B类型
在第二个源文件中实现的就是C类型
请问应如何修改?
getClass()返回的A的类型类,不等于A的类型,是吗?
那么我应该用什么函数?
getClass()试返回一个Class类的实例,然后该实例是用来描述B类的,也就是说,这里直接用
A a = new A();就行
如果这样,将该语句用在其他地方还要修改代码,将Class分别换成B、C……不具有普遍适用性了。
而且我打印了a.getClass().getName(),并将输出的结果直接放在中,成功执行。应该不是类型类的错误吧?
List你这么写的?能通过编译?
追问System.out.println(a.getClass().getName());
追答哦,你这么写的啊
System.out.println(a.getClass().getName()); 得到了一个字符串B,然后你在程序里这么写
A a = new A ();
这个和单独写 A、A、A、A、A有什么区别么,这就能通用了,开玩笑吧