在我的最后一个问题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 循环中,Object
我使用参数化类型而不是 s(我认为更优雅)。
所以,主要问题仍然存在:为什么我们需要通配符?