教程中心 / Java教程 / 类型擦除

类型擦除

10分钟 泛型

类型擦除概念

Java的泛型是伪泛型,在编译时进行类型检查,运行时不保留泛型信息(类型擦除)。

类型擦除过程

 class Box {
    private T value;

    public T get() {
        return value;
    }
}

// 编译后变为:
class Box {
    private Object value;

    public Object get() {
        return value;
    }
} 

泛型的限制

限制说明
不能实例化Tnew T()不允许
不能创建泛型数组new T[]不允许
不能使用基本类型T必须是引用类型
静态方法不能用类泛型静态方法需单独声明泛型

类型擦除与桥方法

 class Person implements Comparable {
    private String name;

    public int compareTo(Person other) {
        return this.name.compareTo(other.name);
    }
}

// 编译器自动生成桥方法:
public int compareTo(Object other) {
    return compareTo((Person) other);
} 

小结

  • 泛型信息在编译时擦除,运行时不存在
  • 类型擦除后T替换为Object或上限类型
  • 编译器生成桥方法保持多态
  • 泛型有类型安全性限制
☕ Java 在线代码编辑器
📝 运行结果