Java 泛型(Generics)主要是在编译期提供类型安全和代码复用能力,用来解决“没有泛型之前只能用 Object,导致运行时才发现问题”的痛点。
下面从解决了什么问题的角度来说,配合例子更清楚。
List list = new ArrayList();
list.add("abc");
list.add(123);
String s = (String) list.get(1); // 运行时才报错
问题:
List<String> list = new ArrayList<>();
list.add("abc");
// list.add(123); // 编译期直接报错
✅ 在写代码时就发现问题,而不是上线后崩溃
Object obj = map.get("key");
String value = (String) obj;
Map<String, Integer> map = new HashMap<>();
Integer value = map.get("key");
✅ 代码更短、可读性更高、更安全
public static <T> T getFirst(List<T> list) {
return list.get(0);
}
可用于:
getFirst(List<String>);
getFirst(List<Integer>);
✅ 一套算法,多种类型
Java 集合框架几乎全部依赖泛型:
List<T>
Map<K, V>
Set<T>
如果没有泛型:
List<? extends Number> list;
表示:
List<Integer>List<Double>List<? super Integer> list;
用于:
❌ 泛型不能:
Integer 而不是 int)Java 泛型主要解决:类型不安全、强制转换多、代码复用难的问题,让错误提前到编译期。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。