实例类型的实例化?

时间:2012-02-25 14:55:37

标签: java generics instance

我将这两个类作为例子:

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

1 个答案:

答案 0 :(得分:4)

您无法实例化通用。记住 - 您可以创建一个AnOtherClass<MyAbstractClass> [其中MyAbstractClass是一个扩展AClass的抽象类,当您尝试实例化它时会发生什么?

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

您可能需要将T传递给method()并使用reflection创建实例,以便在您仍想创建对象或使用factory design pattern时解决该问题。