根据问题,Create instance of generic type in Java?
在撰写本文时,最好的答案是......
private static class SomeContainer<E> {
E createContents(Class<E> clazz) {
return clazz.newInstance();
}
}
但答案仅适用于此SomeContainer.createContents("hello");
我的条件是将类作为内部类放在泛型类中,然后代码应该是这样的。
SomeContainer<T>.createContents(T);
这将产生编译时错误。还没有为T
创建任何引用。有没有办法在泛型类中创建完整的新T
对象?
提前致谢
答案 0 :(得分:1)
由于Java中泛型的实现,您必须传递Class<T>
对象以供进一步使用。
以下是示例:
public class Outer<E> {
private static class Inner<E> {
E createContents(Class<E> clazz) {
try {
return clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
return null;
}
}
}
private Class<E> clazz;
private Inner<E> inner;
public Outer(Class<E> clazz) {
this.clazz = clazz;
this.inner = new Inner<>();
}
public void doSomething() {
E object = inner.createContents(clazz);
System.out.println(object);
}
}
此外,您可以使用@gparyani here提出的<? extends E>