在Java中实例化泛型类
我知道Java的泛型在某种程度上逊于.Net。
我有一个泛型类Foo<T>
,我确实需要使用无参数构造函数实例化T in 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");
}
}
另一种选择是具有“工厂”接口,然后将工厂传递给泛型类的构造函数。这更加灵活,你无需担心反射异常。
以上是 在Java中实例化泛型类 的全部内容, 来源链接: utcz.com/qa/433460.html