如何在泛型类的类型字段中定义的按名称创建类

时间:2011-10-26 14:22:56

标签: java generics

我想使用java泛型来实现这样的函数:

public class Test<T> {
    public T data;

    public Test() {
        data = new T();
    }
}
但是java编译报告错误如“无法实例化类型T”,如何在java中实现这个功能?

3 个答案:

答案 0 :(得分:4)

你需要班级

public Test(Class<? extends T> klass) {
    data = klass.newInstance();
}

答案 1 :(得分:2)

可能的解决方案是为Supplier提供T或工厂。

public class Test<T>{
     public T data;

     public Test(Supplier<T> supplier){
        data = supplier.get();
     }

     // or

     public Test(T t){
        data = t;
     }

}

答案 2 :(得分:1)

这是不可能的,因为Java通过擦除来实现泛型。

有关详细信息,请参阅此类似问题的答案: