Java 泛型(Generics)

泛型是 JDK 5 引入的类型机制,本质是将类型参数化。可以把类型参数看作占位符:在定义类、接口或方法时声明 T、K、V 等类型变量,在使用时填入具体类型(如 String、Integer)。 泛型带来的主要好处: 可读性:从声明即可看出集合或容器中的元素类型 类型安全:非法类型在编译期报错,而非运行时才抛出 ClassCastException 消除强制转换:List<String> 的 get() 直接返回 String 为什么类型参数不能是 primitive 类型参数只能是引用类型(类、接口、枚举、数组、annotation),不能是 基本数据类型(primitive)。根本原因是:Java 泛型在语言规范和实现上,都只面向引用类型。 语言规范直接规定 JLS 要求类型参数的边界必须是引用类型。int、double、boolean 等 primitive 不是类,不能作为 T 填入: List<int> list; // ❌ 编译错误 List<Integer> list; // ✅ 用包装类代替 泛型靠类型擦除实现,擦除后是 Object Java 泛型在编译后会被擦除:List<String> 运行时其实就是 List,元素按 Object 处理。引用类型可以统一向上转型到 Object,而 primitive 不是 Object 的子类型,也不能直接赋给 Object 变量(必须先装箱): Object o = "hello"; // ✅ Object o = 42; // ❌ int 不能赋给 Object Object o = Integer.valueOf(42); // ✅ 装箱后才是引用类型 泛型容器在字节码层面按「对象引用」运作,primitive 放不进去这套模型。 ...

Created 26266-12-26 · Updated 19196-06-19 · 4 min · 713 words · -