一、为什么泛型
泛型让集合在编译期就约束元素类型,避免强制转换和运行时 ClassCastException。
List<String> list = new ArrayList<>();
list.add("a"); String s = list.get(0); // 无需强转
二、泛型方法/类
class Box<T> { private T v; void set(T v){this.v=v;} T get(){return v;} }
static <T> T first(List<T> l){ return l.get(0); }
三、通配符
| 写法 | 含义 |
|---|---|
| ? extends T | 上界,只读(生产者) |
| ? super T | 下界,可写(消费者) |
| ? | 无界 |
注意:Java 泛型是类型擦除的,运行时无泛型信息,不能 new T[] 或 instanceof T。