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

时间:2011-08-06 13:11:49

标签: 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循环的问题。

由于

3 个答案:

答案 0 :(得分:4)

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

System.out.println(i);

因为必须只有一个值。

答案 1 :(得分:3)

在第二个go()方法中,你试图迭代一个int,而不是一个int数组(这是varargs分解为的。)因为你不能有意义地迭代int,编译器抱怨。

答案 2 :(得分:3)

您无法迭代单个整数。它适用于使用varargs输入的方法,因为它是一个整数数组,相当于int[]参数。

你可以简单地使用它:

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

    System.out.println(i);
}