如官方教程generics type erasure ,这个说法让我很困惑。 类型转换插入到底什么时候可能发生?我尝试使用泛型的一些简单用法并使用 javap -c a.class 来检查字节码,但似乎没有按照我的预期插入类型转换。
所谓的重复更多的是关于使用类型转换来确保存在适当的多态性
的桥接方法,而我想知道第二个语句的确切含义。
Insert type casts if necessary to preserve type safety.
可以举个例子来证明一下吗?
最佳答案
最后我觉得Jon Skeet's answer澄清了困惑。
when generics are used, they're converted into compile-time checks and execution-time casts.
当我们尝试编译a.java
并反编译a.class
时,我们将看到魔法(编译器帮助自动插入类型转换)。
List<String> list = new ArrayList<>();
list.add("hell");
out.println(list.get(0));
反编译后:
ArrayList var3 = new ArrayList();
var3.add("hell");
System.out.println((String)var3.get(0));
<小时/>
Using Legacy Code in Generic Code来自官方通用教程:
... whenever the resulting code isn't type-correct, a cast to the appropriate type is inserted...
关于java - 如有必要,插入类型转换以保持类型安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55084504/