Java泛型是JDK 5引入的参数化类型机制,编译期进行类型检查,避免运行时强转和ClassCastException;支持泛型类、方法、接口、集合及通配符,但仅限引用类型且经类型擦除。

Java 泛型是 JDK 5 引入的核心特性,本质是“参数化类型”——把类型像方法参数一样传进去,在编译期做类型检查,避免运行时强转和 ClassCastException。
泛型类:用类型变量替代具体类型
定义时在类名后加
- public class Box
{ private T content; public void set(T content) { this.content = content; } public T get() { return content; } } - 实例化时指定真实类型:Box
box = new Box(); 此时 set() 只接受 String,get() 直接返回 String,无需强转 - 注意:泛型只支持引用类型,不能写 Box
,要用 Box
泛型方法:让单个方法适配多种类型
在返回类型前声明类型参数,独立于类的泛型声明:
- public
T pickFirst(T a, T b) { return a; } - 调用时类型由实参推断:String s = pickFirst("hello", "world"); 编译器自动识别为
- 可加边界限定:
> int compare(T a, T b) ,确保能调用 compareTo()
泛型接口与集合:最常用场景
Java 集合框架从设计之初就全面支持泛型,使用时直接填入元素类型即可:
- List
names = new ArrayList(); // add() 只允许 String,get() 返回 String - Map
scores = new HashMap(); // key 是 String,value 是 Integer - 自定义接口也可带泛型:interface Processor
{ T process(T input); }
通配符:解决泛型不可协变的问题
因为 List
- List>:无界通配符,只能读取为 Object,不能添加(除 null)
- List extends Number>:上界,可读取为 Number,适合“只读”场景(如求和)
- List super Integer>:下界,可写入 Integer,适合“只写”场景(如批量添加)
泛型不是语法糖,它在编译后经历类型擦除,但所有检查都在编译期完成。写对泛型,代码更安全、更清晰,也少一堆 (String) obj 这样的强制转换。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











