Java 泛型 - 删除机制

标签 java generics type-erasure

比如说..,Java 编译器会删除所有类型信息,并用其上限(如果提到)或对象替换所有出现的类型信息。

我的问题是:这里没有插入类型转换。当针对此类型信息无关的类编译其他一些类时,稍后会发生强制转换,其中,根据其他类补充的类型参数,重新编译泛型类(第二次)并且所有强制转换都已就位并且该类已准备好运行......,对吗?

最佳答案

不,该类没有重新编译。转换发生在具体类型和泛型类型之间的边界上。

如果您想弄清楚这一点,您可以考虑使用泛型类作为原始类型(即没有泛型)。例如ArrayList:

List l = new ArrayList(); // An `ArrayList<String>` before generics.

l.add("Hello");
String s = (String) l.get(0);

在已知具体类型的地方插入强制转换(在本例中为String)。它们没有插入到ArrayList类中,并且实际上并不需要这样做。

关于Java 泛型 - 删除机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44217139/

相关文章:

java - 与 kafka 消费者记录并行流

C# 传递强类型属性名称列表

java - 为什么java类型删除会改变目标集合的非泛型类型?

带有泛型重载的 Java 删除(不是覆盖)

c++ - typeid 的成本是多少?

java - 如何在不关闭线程的情况下中断被某些套接字 IO 操作阻塞的线程

java - JNI——可以将复杂类型作为 native 方法参数传递吗?

java - JdbcTemplate SELECT ... FOR UPDATE - 无锁

java - 同质化一个集合

java - 从泛型基接口(interface)的实例中检索类型参数