泛型类型的实例化?
问题描述:
我有这两个类作为例子:泛型类型的实例化?
public class AClass {
public int i;
public static int static_i;
public AClass(int i) {
}
public void aMethod() {}
public static void aStaticMethod() {}
public static AClass getInstance(int i) {
return new AClass(i);
}
}
和
public class AnOtherClass<T extends AClass> {
T aMember;
public void method() {
// Instanciation of T failed
aMember = new T(0);
// Instanciation via getInstance static method failed
aMember = T.getInstance(0);
// OK
T.aStaticMethod();
// OK
aMember.aMethod();
}
}
- 的T实例化失败: “不能实例化类型T” 通过的getInstance静态方法失败
- 实例化:“类型不匹配:无法从AClass转换为T“
- 为什么不能?我不明白你为什么不能这样做。
- 为什么不能将AClass转换为T,因为T是AClass的子类?
答
你不能实例化一个泛型。记住 - 你可以创建一个AnOtherClass<MyAbstractClass>
[其中MyAbstractClass
是一个抽象类,它扩展了AClass
],当你尝试实例化它时会发生什么?
但是 - 调用已存在的类/实例的方法没有问题。
您可能需要通过T
到method()
和使用reflection要解决它,如果你仍然想创建一个对象,或使用factory design pattern创建一个实例。
+0
有关'MyAbstractClass'的评论是无关紧要的。您同样可以将'MyAbstractClass.class'作为类对象传入,并且同样无法创建它 – newacct 2012-02-25 22:51:36
http://*.com/questions/2434041/instantiating-generics-type-in-java http://*.com/questions/2116404/java-generics-why-this-wont-work http:/ /*.com/questions/1090458/instantiating-a-generic-class-in-java – 2012-02-25 15:03:19