擦除特性:

当Java代码编译时候,所有泛型类型信息都将被删除(擦除)。

类型擦除:

  1. 对于泛型类型中的所有类型参数,用“界”替换他们,或者在无界时用Object替换。因此,所生成的代码中,只要只包含普通的类、接口和方法。
  2. 若有必要保持类型安全,则插入类型转换。
  3. 生成桥方法,以在扩展的泛型类型中保持多态性。
  4. 类型擦除确保了不会为参数化类型创建的类,因此,泛型没有引致运行时的开销。

    泛型类型的擦除:

    在类型擦除过程中,Java编译器擦除所有类型形式参数,并且对于每个类型参数,如果它是有界的,则用第一个边界替换它,如果它是无界的,则用Object替换。
    Java编译器也擦除反省方法实际参数中的类型参数。
    类型擦除对可变参数有不可具体化类型的可变参数方法有作用(可变参数或变量参数构造使方法可以接受任意个类型特定的参数)。

    桥方法:

    作为类型擦除过程的一部分,对于扩展了参数化类的一个类,或实现了参数化接口的一个接口,编译器编译时候,需要创建一个合成方法,即所谓的“桥方法”。