【发布时间】:2011-10-26 22:53:41
【问题描述】:
我想使用 java 泛型来实现这样的功能:
public class Test<T> {
public T data;
public Test() {
data = new T();
}
}
但是java编译报错“Cannot instantiate the type T”,如何在java中实现这个功能?
【问题讨论】:
我想使用 java 泛型来实现这样的功能:
public class Test<T> {
public T data;
public Test() {
data = new T();
}
}
但是java编译报错“Cannot instantiate the type T”,如何在java中实现这个功能?
【问题讨论】:
你需要上课
public Test(Class<? extends T> klass) {
data = klass.newInstance();
}
【讨论】:
class 是关键字
T instance = klass.getConstructor(String.class, Integer.class).newInstance("myString", 42); 是的,我同意在大多数情况下使用反射造成的性能损失并不明显。但抛开性能不谈,使用反射时绕过了编译器,这意味着你必须格外小心,否则会出现运行时异常。
对此的一种可能解决方案是提供Supplier 或T 的工厂。
public class Test<T>{
public T data;
public Test(Supplier<T> supplier){
data = supplier.get();
}
// or
public Test(T t){
data = t;
}
}
【讨论】:
public Test(Supplier<? extends T> supplier) {。如果您需要苹果供应商,麦金托什的供应商就可以了。
【讨论】:
T。
T 是否具有可访问的无参数构造函数(C# 有一些额外的语法来指定所需的构造函数)。