Java 泛型(Generics)是 Java 5 引入的重要特性,主要用来在编译期提供类型安全和代码复用。它的核心作用可以总结为以下几点:
在没有泛型之前,集合类(如 ArrayList)只能存 Object,取出来时要强制转换,容易在运行时出错。
没有泛型:
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<String> list = new ArrayList<>();
String s = list.get(0); // 不需要 (String)
你可以写一套逻辑,适用于多种类型。
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<>();
✅ 同一套代码,支持不同类型
例如 Java 标准库中的:
Collections.sort(List<T>)Optional<T>Stream<T>这些都依赖泛型实现通用能力。
看到方法签名就能知道类型约束:
public <T> T max(List<T> list, Comparator<T> c)
一眼就知道:
T 类型列表TList<T>、Map<K,V>)? extends T、? super T)List<String> 和 List<Integer> 是同一类型List<int> ❌,要用 List<Integer>)Java 泛型的作用是:在编译期保证类型安全、减少强制转换、提高代码复用性和可读性。
如果你愿意,我也可以给你讲:
extends / super 的区别免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。