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

lei*_*ero 1 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
}
Run Code Online (Sandbox Code Playgroud)

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

List<List<Integer>> neighbors 
= new ArrayList<List<Integer>>();
Run Code Online (Sandbox Code Playgroud)

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

Roh*_*ain 5

鉴于您的邻居声明,以下调用:

neighbors.get(2);  
Run Code Online (Sandbox Code Playgroud)

会给你一个List<Integer>.

现在在第一个片段中,您试图迭代返回值.因此,当您迭代时List<Integer>,您将获得类型的值Integer.而你正在使用List<Integer>类型循环变量.因此该错误消息.您无法为Integer引用分配List<Integer>引用.

您应该将循环更改为:

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

但是,如果你迭代neighbors,你的循环将正常工作,因为那样你将获得List<Integer>迭代的参考.

for(List<Integer> val: neighbors) { 
}
Run Code Online (Sandbox Code Playgroud)

在2 代码段,则直接分配所获取的值- List<Integer>到一个int原语.显然你不能这样做.它们根本不兼容.因此错误消息.作业应该是:

List<Integer> list = neighbors.get(2);
Run Code Online (Sandbox Code Playgroud)