2012-02-25 111 views
2

我有这两个类作为例子:泛型类型的实例化?

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(); 
    } 
} 
  1. 的T实例化失败: “不能实例化类型T” 通过的getInstance静态方法失败
  2. 实例化:“类型不匹配:无法从AClass转换为T“
  3. 为什么不能?我不明白你为什么不能这样做。
  4. 为什么不能将AClass转换为T,因为T是AClass的子类?
+0

http://stackoverflow.com/questions/2434041/instantiating-generics-type-in​​-java http://stackoverflow.com/questions/2116404/java-generics-why-this-wont-work http:/ /stackoverflow.com/questions/1090458/instantiating-a-generic-class-in-java – 2012-02-25 15:03:19

回答

4

你不能实例化一个泛型。记住 - 你可以创建一个AnOtherClass<MyAbstractClass> [其中MyAbstractClass是一个抽象类,它扩展了AClass],当你尝试实例化它时会发生什么?

但是 - 调用已存在的类/实例的方法没有问题。

您可能需要通过Tmethod()和使用reflection要解决它,如果你仍然想创建一个对象,或使用factory design pattern创建一个实例。

+0

有关'MyAbstractClass'的评论是无关紧要的。您同样可以将'MyAbstractClass.class'作为类对象传入,并且同样无法创建它 – newacct 2012-02-25 22:51:36