Java:再次通配符
在我的最后一个问题中(谢谢所有回答我的人),我已经了解了 和 之间的区别。List<Object>
List<?>
但是,我仍然看不到通配符的有用性。
我有两个:ArrayList
ArrayList<Integer> li = new ArrayList<Integer>(Arrays.asList(1,2,3));
ArrayList<String> ls = new ArrayList<String>(Arrays.asList("one","two","three"));
现在,看看下面的两个代码块:
static void printList(ArrayList<?> list)
{
for (Object elem: list)
System.out.print(elem + " ");
System.out.println();
}
和
static <T> void printList(ArrayList<T> list)
{
for (T elem: list)
System.out.print(elem + " ");
System.out.println();
}
当我打电话时:
printList(li);
printList(ls);
这两种方法都返回输出:
1 2 3
one two three
然而,第二种解决方案,在for循环中,我使用参数化类型而不是s(我认为更优雅)。Object
因此,主要问题仍然存在:为什么我们需要通配符?