java程序设计开发,泛型-泛型的类型擦除学习笔记,泛型是编译期特性,编译器会在编译时移除所有泛型类型信息(类型参数),并在必要时插入类型转换,使代码在运行时与普通非泛型代码行为一致。
Java 程序设计开发:泛型的类型擦除学习笔记
一、类型擦除(Type Erasure)核心概念
定义:
泛型是编译期特性,编译器会在编译时移除所有泛型类型信息(类型参数),并在必要时插入类型转换,使代码在运行时与普通非泛型代码行为一致。
目的:
- 保持与旧版本 Java(JDK 1.5 前)的兼容性。
- 减少运行时内存开销,泛型类型信息仅在编译期有效。
二、类型擦除的核心机制
1. 擦除规则
- 无界类型参数(如
<T>
):擦除为Object
。 - 有界类型参数(如
<T extends Number>
):擦除为上限类型(Number
)。 - 通配符类型(如
? extends T
/? super T
):擦除为上限或下限的边界类型。
2. 编译期 vs 运行时
阶段 | 泛型类型状态 | 示例(List<String> list = new ArrayList<>(); ) |
---|---|---|
编译期 | 存在具体类型参数(Str |