带通配符的嵌套generics

为什么这样做:

List list = new LinkedList(); 

虽然这给出了类型不匹配错误:

 List<List> list = new LinkedList<List>(); 

为什么是这样? 我有办法解决这个问题,而不使用原始类型?

尝试

 List> list = new LinkedList>(); 

注意:您应该知道,当您使用像List这样的集合时,您只能在“只读”模式下使用它(除了添加空值)。

要真正回答你的问题:

在第一种情况下,“list”包含一个特定的未指定类型的列表 – 在本例中为Integer。

在第二种情况下,“list”包含列表列表,但每个子列表可以是任何特定类型,但以下内容完全正常(请注意添加的两个列表的类型):

 List> list = new LinkedList>(); list.add(new LinkedList()); list.add(new LinkedList()); 

这与你不能做的非常相似

 List listO = new 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 } }