是否可以实例化抽象类中作为泛型类型参数提供的类?
示例:
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
}
}
答案 0 :(得分: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");
}
}