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

标签 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
}

neighbors 变量在父类(super class)中声明如下:

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);

关于java - 关于 Java 中类型不匹配的两个相互矛盾的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18286475/

相关文章:

lua - 将字符串转换为时间戳

C# - 如何从 json 动态对象中检索数组?

libgdx 语音到文本

java - 解析超大 Excel 2007 文件的最佳语言

Javafx - StackPane 中的图像可以偏移吗?如果可以,我做错了什么?

java - 必须使用 "orElseThrow"的返回值

casting - 在 F# 中将 DateTime 分配给 Nullable<DateTime>

Java 构造函数未定义

java - 从几个数字中减去最小的数字

c++ - 将 LPBYTE 转换为字符串