泛型核心在于理解类型安全、类型擦除和通配符规则:保障编译期类型检查,擦除导致无法new泛型对象等五类限制,通配符? extends/? super分别用于生产者与消费者场景。

泛型不是靠死记硬背的,关键在理解底层逻辑和常见陷阱。背题前先抓住三条主线:类型安全怎么保障、擦除机制带来哪些限制、通配符为什么必须分上界下界。
盯住“类型安全”这个出发点
所有泛型设计都围绕编译期检查展开。比如 List
- 提前暴露类型错误(避免 ClassCastException)
- 省掉手动强转(String s = (String) list.get(0) → String s = list.get(0))
- 一套代码适配多种类型(ArrayList、HashMap 全部复用同一套泛型框架)
把“类型擦除”当核心锚点来记
Java 泛型是编译期语法糖,运行时所有泛型信息都被擦掉——T 变成 Object,List
- 不能 new T() 或 new T[10](擦除后不知道具体类型)
- static 方法/变量不能用类泛型参数(静态属于类,而泛型属于实例)
- 不能用 instanceof 判断 List
(运行时只剩原始类型 List) - 不能捕获或抛出 T 类型异常(异常处理需要运行时类型信息)
- 泛型数组创建失败(new String[10] 可以,new T[10] 编译不过)
通配符只记三句话口诀
通配符本质是解决泛型不协变问题(List
- ? extends T:只读,适合“生产者”(如 Collections.max(List extends Number>))
- ? super T:只写,适合“消费者”(如 Collections.addAll(List super Integer>, ...)
- ?:完全未知,只能取 Object,不能 add 任何非 null 值(连 Object 都不行)
泛型类/方法/接口区分一句话
别被术语绕晕,看声明位置最准:
-
泛型类:class Box
—— T 在类名后,整个类内部通用 -
泛型方法:
void print(E e) —— 在返回值前,只对该方法生效 -
泛型接口:interface Comparable
—— 实现类必须指定 T(如 class Dog implements Comparable )
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











