泛型(Generics)的核心价值在于**“把类型参数化”,从而在不牺牲类型安全的前提下实现代码复用、可读性提升和运行时性能优化**。下面从多个角度说明泛型如何优化代码,并配合示例说明。
class StringBox {
private String value;
public void set(String value) { this.value = value; }
public String get() { return value; }
}
class IntegerBox {
private Integer value;
public void set(Integer value) { this.value = value; }
public Integer get() { return value; }
}
class Box<T> {
private T value;
public void set(T value) { this.value = value; }
public T get() { return value; }
}
✅ 优化效果
List list = new ArrayList();
list.add("hello");
Integer i = (Integer) list.get(0); // 运行时 ClassCastException
List<String> list = new ArrayList<>();
list.add("hello");
// list.add(123); // 编译期直接报错
String s = list.get(0); // 无需强转
✅ 优化效果
ClassCastExceptionObject obj = getValue();
String s = (String) obj; // 不知道是否安全
T getValue();
String s = getValue(); // 明确类型
✅ 优化效果
泛型本身在 JVM 中是类型擦除(Type Erasure)的,但间接提升性能。
instanceof 和强制转换// 非泛型
List list = new ArrayList();
list.add(1); // int → Integer(装箱)
// 泛型
List<Integer> list = new ArrayList<>();
list.add(1);
虽然 Java 仍有装箱,但:
public static <T> T max(T a, T b, Comparator<T> c) {
return c.compare(a, b) > 0 ? a : b;
}
✅ 优化效果
Map<String, List<Integer>> map = new HashMap<>();
一眼就能看出:
StringList<Integer>✅ 比 Map map = new HashMap() 清晰得多
| 场景 | 优化点 |
|---|---|
| 集合类 | 类型安全、复用 |
| 工具类 | 通用算法 |
| DAO / Repository | 减少 CRUD 重复 |
| 接口设计 | 支持多种类型 |
| 回调 / 事件 | 明确参数类型 |
泛型通过“参数化类型”,在不牺牲类型安全的前提下,最大限度地复用代码、减少错误、提升可读性和维护性。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。