Java 泛型:类型安全与通配符

一、为什么泛型

泛型让集合在编译期就约束元素类型,避免强制转换和运行时 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。