关于java:如何通过泛型类型实例化?

How to instantiate by generic type?

本问题已经有最佳答案,请猛点这里访问。

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

例子:

1
2
3
4
5
public MyClass {
    public MyClass(String test) {

    }
}

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

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


不是那么直接。

您需要一个Class,它将在类型删除后保存泛型类型。

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

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