作为关于泛型类型擦除的官方教程,这句话让我很困惑。当类型转换插入可能准确发生时?我尝试了一些简单的泛型用法并javap -c a.class用于检查字节码,但似乎没有像我预期的那样插入类型转换。所谓的重复更多的是关于使用类型转换以确保正确的桥接方法polymorphism,而我想知道第二个语句的确切含义。必要时插入类型转换以保持类型安全。可以提供任何例子来证明它吗?
1 回答

鸿蒙传说
TA贡献1865条经验 获得超7个赞
最后,我认为Jon Skeet 的回答消除了困惑。
当使用泛型时,它们被转换为编译时检查和执行时强制转换。
当我们尝试编译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 来自官方通用教程:
...只要生成的代码类型不正确,就会插入适当类型的强制转换...
添加回答
举报
0/150
提交
取消