我的问题是关于泛型类和方法中使用的类型变量。
为什么我们不能做这样的事情 T = new T();
或者换句话说,为什么我们不能构造变量类型的对象?
我知道通用信息在编译时被删除,一切都转换成
对象,那么为什么编译器不假定 T
是一个对象并让我们构造它呢?
最佳答案
问题在于,在运行时 JVM 不知道 T
实际代表哪个类(该信息不会在运行时保留,这就是“类型删除”的意思)。因此,JVM 只看到您想要构造一个新的 T
,但不知道实际调用哪个构造函数 - 因此这是不允许的。
有变通办法,但不会像您建议的那样工作。
why doesn't the compiler assume that T is an object and let us construct it ??
当然,运行时可以为你构建一个 java.lang.Object
的实例,但这并没有多大帮助,因为你真的想要一个 T
.
关于Java 通用类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4021826/