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

时间:2013-08-17 07:51:35

标签: java type-conversion

究竟是什么造成这种情况?我正在尝试在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
}

neighbor变量在超类中声明如下:

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

我不知道为什么它会在一行上告诉我它是一个整数并且不能转换为整数列表然后在下一行只是改变它的想法并说出完全相反的意思。这是什么?

2 个答案:

答案 0 :(得分:5)

鉴于您声明了邻居,请执行以下调用:

neighbors.get(2);  

会给你一个List<Integer>

现在在1 st 片段中,您试图迭代返回值。因此,当您遍历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) { 
}

在2 nd 片段中,您直接将获取的值 - List<Integer>分配给int原语。显然你不能这样做。它们根本不兼容。因此错误消息。 作业应该是:

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

答案 1 :(得分:1)

 neighbors.get(2)

返回List<Integer>。第二个警告很清楚。

  

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

要迭代此列表,您需要迭代i - 整数。

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