1. 泛型基础:从类型混乱到类型安全
2004年Java 5发布时引入的泛型特性,彻底改变了Java开发者的编码方式。记得我刚接触Java时,经常需要这样处理集合:
java复制List list = new ArrayList();
list.add("Hello");
String str = (String) list.get(0); // 必须强制类型转换
这种写法存在两个致命问题:首先,编译时无法发现类型错误,比如不小心放入Integer对象;其次,到处都需要显式类型转换,代码变得冗长。泛型的出现完美解决了这些问题:
java复制List<String> list = new ArrayList<>();
list.add("Hello");
String str = list.get(0); // 自动类型推断
1.1 泛型核心概念解析
泛型的本质是参数化类型,即在定义类、接口或方法时,将类型作为参数使用。这种设计带来了三大优势:
- 编译时类型检查:编译器能在编码阶段发现类型不匹配的错误
- 消除强制类型转换:使代码更加简洁易读
- 代码复用:同一套逻辑可以适用于多种数据类型
类型参数通常使用单个大写字母表示,常见约定有:
- E:Element(集合元素)
- K:Key(键)
- V:Value(值)
- T:Type(类型)
- N:Number(数字)
注意:虽然可以使用任意标识符作为类型参数,但遵循这些约定能让代码更易理解
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 泛型深度应用:从基础到高级
2.1 自定义泛型类与接口
创建泛型类时,需要在类名后声明类型参数。下面是一个简单的泛型Box示例:
java复制public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
使用时可以指定具体类型:
java复制Box<String> s
