使用 Java 泛型(Generics) 的核心目的,可以概括为:在编译期提供类型安全、消除强制类型转换、提高代码复用性和可读性。
下面从几个关键角度说明「为何要用 Java 泛型」。
List list = new ArrayList();
list.add("hello");
list.add(123);
String s = (String) list.get(1); // 运行时才报错:ClassCastException
问题:
List<String> list = new ArrayList<>();
list.add("hello");
// list.add(123); // 编译期直接报错
✅ 类型错误在写代码时就被发现
List list = new ArrayList();
list.add("abc");
String s = (String) list.get(0);
List<String> list = new ArrayList<>();
list.add("abc");
String s = list.get(0); // 不需要强转
✅ 代码更简洁、更安全
泛型让同一套逻辑适用于多种类型。
public class Box<T> {
private T value;
public void set(T value) { this.value = value; }
public T get() { return value; }
}
可用:
Box<String> stringBox = new Box<>();
Box<Integer> intBox = new Box<>();
✅ 不用为每种类型写重复代码
例如:
Map<String, List<Integer>> map;
一眼就能看出:
✅ 减少注释、降低理解成本
Java 集合框架(List / Set / Map)全部基于泛型:
没有泛型,这些现代 Java 特性无法实现。
| 优势 | 说明 |
|---|---|
| 类型安全 | 编译期检查 |
| 减少强转 | 代码更干净 |
| 代码复用 | 一套逻辑多类型 |
| 可读性强 | 类型即文档 |
| 框架基础 | 现代 Java 必备 |
Java 泛型让你“写一次,类型安全地为多种类型复用代码”,并把错误从运行期提前到编译期。
如果你愿意,我也可以讲:
<? extends T> 和 <? super T> 的区别免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。