java - Java泛型中删除的概念是什么?

标签 java generics

Java 泛型中删除的概念是什么?

最佳答案

这基本上是通过编译器技巧在 Java 中实现泛型的方式。编译后的通用代码实际上只是使用了java.lang.Object无论您说什么T (或其他一些类型参数)——并且有一些元数据告诉编译器它确实是一个泛型类型。

当您针对泛型类型或方法编译一些代码时,编译器会计算出您的真正含义(即 T 的类型参数是什么)并在编译时验证您重新做正确的事,但发出的代码再次只是以 java.lang.Object 的形式说话- 编译器在必要时生成额外的强制转换。在执行时,List<String>List<Date>完全一样;额外的类型信息已被编译器删除

将其与 C# 进行比较,C# 中的信息在执行时保留,允许代码包含诸如 typeof(T) 之类的表达式。相当于T.class - 除了后者是无效的。 (请注意,.NET 泛型和 Java 泛型之间还有进一步的区别。)在处理 Java 泛型时,类型删除是许多“奇怪”警告/错误消息的来源。

其他资源:

关于java - Java泛型中删除的概念是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/313584/

相关文章:

Java 11 HTTP 客户端自定义执行器线程池大小

java - Jackson 使用不同的自定义序列化器序列化字段

java - 调试 Oracle Java 教程 - 从内部类访问局部变量;需要宣布最终

generics - 具有通用参数和使用类型参数的方法的 Kotlin 抽象类

java - 泛型声明类型解释

java - 将 OAuth 与 Scribe-Java 和 Google Apps 结合使用

java - Java 文件夹结构中的 %t

实现协议(protocol)类型的swift方法参数?

c# - 泛型类型的静态构造函数如何工作?

c# - 混淆泛型和 Entity Framework