Java 泛型(Generics)是 Java 5 引入的重要特性,主要用来在编译期提供类型安全和代码复用。它的核心作用可以归纳如下:
在没有泛型之前,集合类(如 ArrayList)只能存 Object,取出来时要强制转换,容易在运行时出错。
没有泛型:
List list = new ArrayList();
list.add("abc");
list.add(123); // 编译通过,但逻辑错误
String s = (String) list.get(1); // 运行时 ClassCastException
使用泛型:
List<String> list = new ArrayList<>();
list.add("abc");
// list.add(123); // 编译错误,直接避免错误
String s = list.get(0); // 不需要强制转换
✅ 泛型把类型错误从运行时提前到编译时。
泛型可以让代码更简洁、可读性更好。
List<Integer> list = new ArrayList<>();
list.add(10);
int value = list.get(0); // 自动拆箱,无需 (Integer)
通过泛型,可以写出适用于多种类型的通用代码。
public class Box<T> {
private T value;
public void set(T value) { this.value = value; }
public T get() { return value; }
}
使用:
Box<String> box1 = new Box<>();
Box<Integer> box2 = new Box<>();
✅ 同一套逻辑,支持任意类型。
可以在不关心具体类型的情况下,实现通用算法。
public static <T> void swap(T[] array, int i, int j) {
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
泛型让方法签名更清晰:
public <T> T max(List<T> list, Comparator<T> c)
一看就知道:
List<T>, Map<K,V>)? extends T, ? super T)List<String> 和 List<Integer>
运行时都是 List
List<int> ❌
List<Integer> ✅
Java 泛型的作用是:在编译期保证类型安全、减少强制转换、提高代码复用性和可维护性。
如果你愿意,我也可以帮你讲:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。