Java中关于类型不匹配的两个相互矛盾的错误



究竟是什么原因导致了这种情况?我在一个java程序中尝试创建的一个方法上遇到了两个相互矛盾的错误

public void numberOfTrianglesIncidentToVertex(){
  for(List<Integer> pairs: neighbors.get(2)){     // Type mismatch: cannot convert from element type Integer to List<Integer>
  }
    int fail = neighbors.get(2);       // Type mismatch: cannot convert from List<Integer> to int
}

邻居变量在一个超类中声明如下:

List<List<Integer>> neighbors 
= new ArrayList<List<Integer>>();

我不知道为什么它会在一行告诉我这是一个整数,不能转换为整数列表,然后在下一行改变主意,说完全相反的话。是哪一个?

给定邻居的声明,以下调用:

neighbors.get(2);  

会给你一个List<Integer>

现在,在1st片段中,您正在尝试迭代返回值。因此,当您对List<Integer>进行迭代时,您会得到类型为Integer的值。并且您使用的是List<Integer>类型的循环变量。因此出现了错误信息。不能将Integer引用分配给List<Integer>引用。

您应该将循环更改为:

for(int val: neighbors.get(2)) {  // 'int' works in place of 'Integer', due to unboxing
}

但是,如果您在neighbors上进行迭代,您的循环将正常工作,因为这样您将在迭代时获得List<Integer>引用。

for(List<Integer> val: neighbors) { 
}

在2nd代码段中,您直接将提取的值-List<Integer>分配给int基元。这显然是你做不到的。它们根本不兼容。因此出现了错误消息。任务应该是这样的:

List<Integer> list = neighbors.get(2);
 neighbors.get(2)

返回List<Integer>。第二个警告是明确的。

类型不匹配:无法从元素类型Integer转换为List

要对这个列表进行迭代,您需要对i-integer进行迭代。

 for(Integer pairs: neighbors.get(2))

最新更新