无界通配符
#无界通配符
无界通配符是指通配符(?),比如List<?>,它被称为未知类型list。无界通配符适用于在以下两种情况:
- 如果你要实现的是一个适用于Object作为类型参数的方法。
- 调用那些无关于类型参数的方法时,比如List.size或List.clear。实际上Class<?>被频繁的使用因为Class
的大部分方法和T无关。
考虑printList
方法如下:12345public static void printList(List<Object> list) {for (Object elem : list)System.out.println(elem + " ");System.out.println();}
以上方法的目标是打印任何类型的list,但是它并没有完成它的目标-它只能输出List
对于任何确定的类型A,List<A>
都是List<?>
的子类型,所以我们可以使用print方法来输出任何类型的List1234List<Integer> li = Arrays.asList(1, 2, 3);List<String> ls = Arrays.asList("one", "two", "three");printList(li);printList(ls);
注意:Arrays.asList方法是一个静态的工厂方法,它把给定的Array转化成大小合适的list。
此外,List<Object>
和List<?>是不同的,我们可以List<Object>
中插入任何Obejct和Object的子类型,但是我们只能在List<?>中插入null。