在 Java 中,**泛型(Generics)和集合(Collection)**是紧密相关的,泛型在很大程度上正是为了解决集合使用中的类型安全问题而引入的。下面从几个层面说明它们的关系。
在 Java 5 之前,集合(如 ArrayList、HashMap)默认存储的是 Object:
List list = new ArrayList();
list.add("hello");
list.add(123);
String s = (String) list.get(0); // 需要强制类型转换
问题:
ClassCastExceptionJava 5 引入泛型后,集合可以指定元素类型:
List<String> list = new ArrayList<>();
list.add("hello");
// list.add(123); // 编译报错
String s = list.get(0); // 不需要强转
✅ 优点:
Java 集合框架(Collection Framework)大量使用泛型:
| 接口 | 泛型形式 |
|---|---|
List |
List<E> |
Set |
Set<E> |
Map |
Map<K, V> |
Queue |
Queue<E> |
ArrayList<String> list;
HashSet<Integer> set;
HashMap<String, User> map;
public static <T> void printList(List<T> list) {
for (T t : list) {
System.out.println(t);
}
}
List<?> list; // 任意类型
List<? extends Number> list; // Number 及其子类
List<? super Integer> list; // Integer 及其父类
示例:
void print(List<? extends Number> list) {
for (Number n : list) {
System.out.println(n);
}
}
Object,但编译期保证安全List<String> a = new ArrayList<>();
List<Integer> b = new ArrayList<>();
// 运行时 a 和 b 类型相同
泛型是为集合而生的重要特性,它让 Java 集合从“类型模糊的容器”变成了“类型安全的容器”。
如果你愿意,我也可以:
你想从哪方面继续?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。