比如说..,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/