请解释为什么以下代码片段无法编译:
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/