我知道 Java 的泛型不如 .Net 的。
我有一个通用类 Foo<T>
,我真的需要实例化一个 T
在 Foo
使用无参数构造函数。如何解决 Java 的限制?
最佳答案
一种选择是传入 Bar.class
(或您感兴趣的任何类型 - 指定适当的 Class<T>
引用的任何方式)并将该值保留为字段:
public class Test {
public static void main(String[] args) throws IllegalAccessException,
InstantiationException {
Generic<Bar> x = new Generic<>(Bar.class);
Bar y = x.buildOne();
}
}
public class Generic<T> {
private Class<T> clazz;
public Generic(Class<T> clazz) {
this.clazz = clazz;
}
public T buildOne() throws InstantiationException, IllegalAccessException {
return clazz.newInstance();
}
}
public class Bar {
public Bar() {
System.out.println("Constructing");
}
}
另一种选择是拥有一个“工厂”接口(interface),并将工厂传递给泛型类的构造函数。这样更加灵活,而且您无需担心反射异常。
关于java - 在 Java 中实例化一个泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1090458/