Java泛型类型擦除铸造

时间:2012-10-23 15:43:37

标签: java

当由于擦除而在运行时无法获得类型信息时,java编译器如何知道为泛型集合中的对象提供适当的强制转换?

2 个答案:

答案 0 :(得分:1)

每当你打电话时, list.get(foo),列表为ArrayList<String>,然后调用者get的结果投放到String,而不是被调用者。调用者在编译时知道应该将结果转换为什么(String),因此可以在那里插入强制转换。

答案 1 :(得分:0)

根据oracle tutorial

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

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