Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按泛型类型实例化?_Java_Generics - Fatal编程技术网

Java 如何按泛型类型实例化?

Java 如何按泛型类型实例化?,java,generics,Java,Generics,是否可以实例化抽象类中作为泛型类型参数提供的类 public abstract class AbstractClass<T extends MyClass> { public AbstractClass() { T t = new T("test"); //Cannot instantiate the type T } } 例如: 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
    }
}
例如:

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
    }
}
公共抽象类AbstractClass{
公共抽象类(){
T=new T(“test”);//无法实例化类型T
}
}

这并不是那么简单

您需要一个
,该类将在类型擦除后保存泛型类型

然后,必须调用以触发所需的构造函数并动态创建新实例。例如:

public abstract class AbstractClass<T extends MyClass> {
    public AbstractClass(Class<T> clazz) {
        T t = clazz.getDeclaredConstructor(String.class).newInstance("test");
    }
}
公共抽象类AbstractClass{
公共抽象类(类clazz){
T=clazz.getDeclaredConstructor(String.class).newInstance(“测试”);
}
}

这并不是那么简单

您需要一个
,该类将在类型擦除后保存泛型类型

然后,必须调用以触发所需的构造函数并动态创建新实例。例如:

public abstract class AbstractClass<T extends MyClass> {
    public AbstractClass(Class<T> clazz) {
        T t = clazz.getDeclaredConstructor(String.class).newInstance("test");
    }
}
公共抽象类AbstractClass{
公共抽象类(类clazz){
T=clazz.getDeclaredConstructor(String.class).newInstance(“测试”);
}
}