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