Java 通用类型变量

标签 java generics

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

为什么我们不能做这样的事情 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/

相关文章:

c# - 通用表单的具体实现在设计器中不起作用

c# - 具有通用叶子的复合图案

java - Maven Spring 依赖库

java - 扩展基类并在 Hibernate 中执行 findById

java - MPAndroidChart BarChart - 条形内的垂直值

Java8 类型通用删除方法签名和 lambda 不起作用

android - Kotlin 函数需要 Nothing but defined as a different type

ios - 如何修复协议(protocol)只能用作通用约束,因为它具有自身或关联的类型要求错误

java - 如何找到用户输入的两个输入的公共(public)后缀?

java - 无法将字符串解析为 Java 8 LocalDateTime