在泛型类中创建Java中泛型类型的实例

时间:2013-08-22 18:33:47

标签: java class generics instantiation generic-programming

根据问题,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对象?

提前致谢

1 个答案:

答案 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>