类型泛型的实例

时间:2010-07-06 14:27:15

标签: java generics

我的问题是:

为什么不能使用新的T()实例化泛型类型,而使用类Class的newInstance()来实现?

4 个答案:

答案 0 :(得分:7)

您需要使用反射(newInstance()),因为在编译时,构造函数需要链接的类是未知的。所以编译器无法生成链接。

答案 1 :(得分:7)

由于类型擦除:泛型类型在执行时不知道T是什么,因此无法调用正确的构造函数。

有关(更多)更多信息,请参阅Angelika Langer's FAQ entry on type erasure

答案 2 :(得分:1)

也许,你正在看这种模式(取自另一个question的答案):

private static class SomeContainer<E>
{
    E createContents(Class<E> clazz)
    {
        return clazz.newInstance();
    }
}

在这里,当我们创建SomeContainer时,我们使用具体类(如String)对实例进行参数化。 createContents仅接受String.classString.class.newInstance()将创建一个新的(空)字符串。

答案 3 :(得分:0)

如果您在编译时知道类型,请使用“new Whatever()”。如果您在编译时不知道类型但可以获取它的Class对象,请使用newInstance()。

99%的时间我都知道这种类型,我使用“new Whatever()”。