【问题标题】:Instance of type generic [duplicate]泛型类型的实例[重复]
【发布时间】:2010-07-06 14:27:15
【问题描述】:

我的问题是这样的:

为什么不能用new T()来实例化一个泛型类型,而用类Class的newInstance()可以呢?

【问题讨论】:

标签: java generics


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    由于类型擦除:泛型类型在执行时不知道T 是什么,所以它不能调用正确的构造函数。

    更多信息请参见Angelika Langer's FAQ entry on type erasure

    【讨论】:

      【解决方案3】:

      也许,您正在查看这种模式(取自对另一个 question 的回答):

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

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

      【讨论】:

        【解决方案4】:

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

        99% 的时间我都知道类型并且我使用“newwhatever()”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-20
          • 1970-01-01
          • 2013-10-03
          • 2011-04-02
          相关资源
          最近更新 更多