Java:for-each-loop中的“匿名”数组

时间:2010-03-01 20:29:57

标签: java arrays foreach

当我在for循环中尝试一些特殊的东西时,我发现Java似乎并不喜欢将一个匿名数组作为for-each-loop的源:

for (String crt : {"a","b","c"} ) {
    doSomething();
}

实际上不起作用

String[] arr = {"a","b","c"};
for (String crt : arr ) {
    doSomething();
}

确实

即使将数组转换为String []也无济于事。将光标移到第一个版本上时,eclipse告诉我:

Type mismatch: cannot convert from String[] to String,而意思是“crt”。

这是一个错误吗?

4 个答案:

答案 0 :(得分:64)

这将有效:

for (String crt : new String[]{"a","b","c"} ) {
    doSomething();
}

答案 1 :(得分:20)

Java语言提供{"a","b","c"}表单作为快捷方式,但只能在分配期间使用。这可能是为了避免解析过程中可能存在的歧义,在某些位置{}可以解释为代码块。

正确的做法是诺亚建议new String[]{"a","b","c"}

答案 2 :(得分:4)

不,不知道这个怎么样? :)可惜没有简洁的版本。假设您可以使用Groovy或Scala,如果您想要这样的东西:)

for (String s : Arrays.asList("a","b","c")) {
    hmm(s);
}

答案 3 :(得分:3)

你想要

for (String crt : new String [] {"a","b","c"} ) {
    doSomething();
}

我使用IntelliJ并且它表示在for-loop中将结果右侧的“表达式预期”放入,这似乎更准确。

我应该补充一点,IntelliJ还提供了为我自动添加“new String []”。