Java Var-args 和增强的 for 循环编译器错误

标签 java variadic-functions foreach

请解释为什么以下代码片段无法编译:

public class ScjpTest{

static void go(int... i){
    System.out.println("In 1");

    for (int x : i){
        System.out.println(x);
    }
}

static void go(int i){
    System.out.println("In 2");

    for (int x : i){
        System.out.println(x);
    }
}

public static void main(String[] args){
    go(1);
    go(1,2);
    go(1,2,3);

}
}

我正在测试看看将调用哪个 go() 实例,但它失败并出现以下错误:

ScjpTest.java:16: foreach not applicable to expression type
                  for (int x : i){
                         ^
1 error

我一辈子都无法弄清楚增强的 for 循环出了什么问题。

谢谢

最佳答案

在第一个重载中,i 是一个整数数组。这就是你可以迭代它的方式。在第二个重载中,它只是一个单个整数值。增强的 for 循环仅适用于 Iterable 实例和数组 - 而不是单个值。你应该只写:

System.out.println(i);

因为必然只有一个值。

关于Java Var-args 和增强的 for 循环编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6967005/

相关文章:

java.io.FileNotFoundException : class path resource 错误

java - 改造调用排队未达到 onResponse 或 onFailure

c++ - 使用 va_copy 有什么意义?

scala - 如何编写 "orElse"的惰性可变参数版本

php - 如果找到某个字符串则返回 true 或 false

c# - foreach 循环之前的代码不执行

java - 如何将值注入(inject)模拟对象的构造函数或通过 setter?我收到意外的调用错误

java - Guava ImmutableList...到底是什么支持它?

c - 可变参数列表 : possibility to collect them in variable?

php - 将新数据添加到mysql中的旧数据中