Type Erasure

Java 语言引入了泛型,以在编译时提供更严格的类型检查并支持泛型编程。为了实现泛型,Java 编译器将类型擦除应用于:

  • 将泛型中的所有类型参数替换为其边界;如果类型参数不受限制,则将它们替换为Object。因此,产生的字节码仅包含普通的类,interface和方法。

  • 必要时插入类型转换,以保持类型安全。

  • 生成 bridge 方法以在扩展的泛型类型中保留多态。

类型擦除可确保不会为参数化类型创建新的类;因此,泛型不会产生运行时开销。