泛型进阶

无限制通配符

无限通配符即: <?>,主要在不确定或不关心实际参数类型时使用,如:

1
2
3
public boolean removeAll(Collection<?> c){
...
}

由于它不确定具体类型,所以不能将任何元素(Null 除外)放入,即它是只读的,但在很多情况下需要放入对象,因此一种比较常见的方法是使用 类型参数 作为辅助函数

1
2
3
4
5
6
7
public static void swap(List<?> list, int i, int j){
swapHelper(list, i, j);
}

public static <E> void swapHelper(List<E> list, int i, int j){
list.set(i, list.get(j));
}

那么 List<?>List<Object> 有什么区别呢?

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×