2014-11-04 69 views
1

是否可以实例化在抽象类中作为泛型类型参数提供的类?如何通过泛型类型实例化?

例子:

public MyClass { 
    public MyClass(String test) { 

    } 
} 

是否可以实例化另一个抽象类里面这个类?

public abstract class AbstractClass<T extends MyClass> { 
    public AbstractClass() { 
     T t = new T("test"); //Cannot instantiate the type T 
    } 
} 

回答

5

这不是那么直截了当。

您需要一个Class<T>,它将在删除类型后保留通用类型。

然后,您必须调用Class#getDeclaredConstructor(Class<?> .. params)来触发所需的构造函数并动态创建新实例。例如:

public abstract class AbstractClass<T extends MyClass> { 
    public AbstractClass(Class<T> clazz) { 
     T t = clazz.getDeclaredConstructor(String.class).newInstance("test"); 
    } 
}