带通配符的嵌套generics
为什么这样做:
List list = new LinkedList();
虽然这给出了类型不匹配错误:
List<List> list = new LinkedList<List>();
为什么是这样? 我有办法解决这个问题,而不使用原始类型?
尝试
List extends List>> list = new LinkedList>();
注意:您应该知道,当您使用像List这样的集合时,您只能在“只读”模式下使用它(除了添加空值)。
要真正回答你的问题:
在第一种情况下,“list”包含一个特定的未指定类型的列表 – 在本例中为Integer。
在第二种情况下,“list”包含列表列表,但每个子列表可以是任何特定类型,但以下内容完全正常(请注意添加的两个列表的类型):
List> list = new LinkedList>(); list.add(new LinkedList()); list.add(new LinkedList());
这与你不能做的非常相似
List
有些操作在您的列表列表中完全有效吗? 这在整数列表列表中是非法的。
为了做你想做的事情(有一个列表列表,所有的子列表都是特定类型的唯一列表),我认为Zed的答案就像你得到的那样接近。
解决这个问题的方法是
List> list = new LinkedList>();
你在那里也没有真正丢失任何东西 – 你的Integer规范在任何地方都没有用,因为list
将内部list
定义为使用?
使用,
List> list1 = new LinkedList>();
我知道这是和post,但我似乎没有解决c0d3x问题的答案。
如果你这样做
List> list = new LinkedList>();
他如何为外部列表中的每个内部整数列表调用此方法?
public void doSomeThingWithAIntegerList(List list){ for(Integer i : list){ // use it for some purpose } }