泛型(Generics) 的核心作用是:让代码在“保证类型安全”的前提下,实现“复用”和“更清晰的类型约束”。
下面从直观到深入说明它的作用。
泛型 = 参数化类型
把“类型”也当成参数,让同一份代码可以适用于多种类型,同时避免类型错误。
List list = new ArrayList();
list.add("hello");
list.add(123);
String s = (String) list.get(0); // 可能 ClassCastException
问题:
List 里放的是什么类型class StringBox {
private String value;
}
class IntegerBox {
private Integer value;
}
问题:
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> integerBox = new Box<>();
✅ 一份代码,支持多种类型
Box<String> box = new Box<>();
box.set("hello");
// box.set(123); // ❌ 编译错误
✅ 错误在写代码时就能发现,而不是运行时崩溃
Box<String> box = new Box<>();
String s = box.get(); // 不需要 (String)
✅ 代码更简洁、更安全
List<User> users = new ArrayList<>();
一眼就知道:
List<String> list = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
public <T> T getFirst(T[] array) {
return array[0];
}
public interface Comparator<T> {
int compare(T o1, T o2);
}
| 概念 | 说明 |
|---|---|
| 泛型 | 类型参数 |
T |
一个“占位类型” |
| 编译期 | 检查类型 |
| 运行期 | 类型被擦除(Java) |
Java 的泛型是 编译期机制,运行期会被“类型擦除”。
✅ 当你发现:
Object + 强制转换泛型的作用是:
- 提高代码复用性
- 提供编译期类型检查
- 避免强制类型转换
- 增强代码可读性和安全性
如果你愿意,我也可以:
new T()免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。