如何通过泛型类型实例化?

mem*_*und 1 java generics

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

例:

public MyClass {
    public MyClass(String test) {

    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以在另一个抽象类中实例化这个类?

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

Kon*_*kov 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");
    }
}
Run Code Online (Sandbox Code Playgroud)