1

当由于擦除导致类型信息在运行时不可用时,java 编译器如何知道为泛型集合中的对象提供适当的转换?

4

2 回答 2

1

每当您调用 eglist.get(foo)并且列表是 an时,调用者而不是被调用者ArrayList<String>将结果get转换为 a 。调用者在编译时知道应该将结果转换为 (a ),因此可以将转换插入那里。StringString

于 2012-10-23T16:08:42.913 回答
0

按照oracle教程

  • 如果类型参数是无界的,则将泛型类型中的所有类型参数替换为其边界或 Object。因此,生成的字节码只包含普通的类、接口和方法。
  • 必要时插入类型转换以保持类型安全。
  • 生成桥方法以保留扩展泛型类型中的多态性。

因此,您的类文件包含有界类(或)Object 而不是泛型类型。

于 2012-10-23T15:44:50.663 回答