Java通用类型变量

时间:2010-10-26 08:19:23

标签: java generics

我的问题是关于泛型类和方法中使用的类型变量。

为什么我们不能做这样的事情T = new T();或换句话说,为什么我们不能构造一个类型变量的对象?

我知道在编译过程中会删除通用信息,所有内容都会转换为
对象,为什么编译器不认为T是一个对象而让我们构造它?

2 个答案:

答案 0 :(得分:10)

问题在于,在运行时,JVM不知道T实际代表哪个类(该信息不会在运行时保留,这就是“类型擦除”的含义)。因此,JVM只是看到你想要构造一个新的T,但不知道实际调用哪个构造函数 - 因此它是不允许的。

有一些解决方法,但它不会像你提议的那样有用。

  

为什么编译器不会假设T.   是一个对象,让我们构建它   ??

嗯,当然运行时可以为你构建一个java.lang.Object的实例,但这并不会真正有用,因为你真的想要一个T

答案 1 :(得分:2)

除了sleske的回答;如果需要在泛型类中创建T的对象,解决方案是将Class<T>引用作为参数传递给构造函数或需要创建新对象的方法,并使用该类创建新实例。 / p>