我的问题是关于泛型类和方法中使用的类型变量。
为什么我们不能做这样的事情T = new T();
,换句话说,为什么我们不能构造变量类型的对象呢?
我知道在编译过程中会删除通用信息,并且所有信息都将转换为
Object,那么为什么编译器不假定该T
对象是对象并让我们构造它呢?
问题在于,在运行时JVM不知道其T
实际代表的类(该信息不会在运行时保留,这就是“类型擦除”的含义)。因此,JVM只是看到您要构造一个new T
,但不知道实际调用哪个构造函数-因此是不允许的。
有解决方法,但是它不能按照您的建议工作。
为什么编译器不假定T是一个对象并让我们构造它?
好吧,当然,运行时可以java.lang.Object
为您构造一个实例,但这并没有真正的帮助,因为您确实想要一个T
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句