泛型(Generics)的核心价值是在编译期提供类型安全与代码复用,同时避免运行时的类型转换和错误。下面从“它解决了哪些具体问题”来讲。
在没有泛型之前(如 Java 早期、C++ 模板出现前的一些写法),常用 Object 或 void* 来兼容多种类型:
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); // 编译期直接报错
✅ 把错误从「运行时」提前到「编译时」
非泛型代码频繁需要手动转型:
Object obj = map.get("key");
String value = (String) obj;
泛型后:
Map<String, String> map = new HashMap<>();
String value = map.get("key");
✅ 代码更简洁、可读性更好
没有泛型时,为了支持多种类型,要写多份逻辑:
class IntBox {
int value;
}
class StringBox {
String value;
}
泛型后:
class Box<T> {
T value;
}
✅ 一套逻辑,支持任意类型
泛型让算法独立于数据类型:
<T> T max(T a, T b) { ... }
适用于:
✅ 提高可维护性
泛型能明确表达“输入和输出的关系”:
Function<String, Integer>
Supplier<User>
Consumer<Log>
✅ API 语义更明确,调用者更少犯错
泛型本质是:
用类型参数代替具体类型,在编译期做检查
相比:
Object:太松✅ 泛型是“刚刚好”的方案
泛型解决的是:用同一套代码,安全地处理多种类型的问题。
如果你愿意,我也可以:
你更想看哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。