究竟是什么原因导致了这种情况?我在一个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))