Java泛型为什么我不能实例化泛型类型

got*_*ch4 5 java generics type-erasure

我正在使用泛型来写东西,令我惊讶的是我发现这不起作用:

class foo<T>{

 T innerT = new T();

}
Run Code Online (Sandbox Code Playgroud)

所以我不能实例化泛型类型?有没有办法做到这一点?

Mar*_*cin 13

在运行时,JVM不知道T是什么,因此无法创建类型为T的新对象.在编译期间会删除类型.

  • 此外,T可以是接口或抽象类. (10认同)
  • 或枚举,或只是一个没有可访问的无参数构造函数的普通具体类. (3认同)

cyb*_*org 8

是的,这真非常令人讨厌.

我使用的工作是强制客户端在构造新的时传递类foo<T>- 即

public foo(Class<T> myClass)
Run Code Online (Sandbox Code Playgroud)

然后你可以myClass.newInstance()改用.

  • T可以是抽象类或接口,在这种情况下,解决方案绝对没用. (4认同)
  • 这个答案并不能解释原因.在解决它之前,你应该理解为什么会这样做. (2认同)

Zap*_*ppi 8

我总是喜欢创作模式(工厂,原型,......).特别

public foo(Class<T> myClass)
Run Code Online (Sandbox Code Playgroud)

然后你可以myClass.newInstance()改用.

是一个糟糕的解决方案,因为T可能没有空构造函数.