泛型的核心作用是把类型检查提前到编译期,让代码更安全、更清晰、更可复用。

具体有三点价值:第一,类型安全——没有泛型时集合里什么都能放,取出时要强制转型,类型错误要到运行期才以 ClassCastException 暴露;有了泛型,List<String> 编译期就拒绝放入 Integer。第二,消除强制转型——取元素不再需要 (String) list.get(0),代码更干净。第三,编写通用算法——可以写出对多种类型都适用的类和方法,如 Collections.sort(List<T>),同时保留类型约束(如 T extends Comparable)。

// 不使用泛型
List list = new ArrayList();
list.add("abc");
String s = (String) list.get(0); // 需要强转,可能运行期出错

// 使用泛型
List<String> strs = new ArrayList<>();
strs.add("abc");
// strs.add(1); // 编译期直接报错
String t = strs.get(0);

追问方向:泛型擦除是怎么回事?通配符 ? extends? super 的区别?

(约 320 字)