web-dev-qa-db-ja.com

Java:for-each-loopの「匿名」配列

Forループで何か特別なことを試してみましたが、Javaは、for-eachループのソースとして匿名配列を正しく配置するのは好きではないようです。

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」を意味します。

これはバグですか?

36
Atmocreations

これは動作します:

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

Java言語は、ショートカットとして{"a","b","c"}フォームを提供しますが、これは割り当て時にのみ可能です。これは、一部の位置で、解析中に起こり得るあいまいさを避けるために可能です{}はコードブロックとして解釈できます。

それを行う正しい方法は、new String[]{"a","b","c"}を使用したnoahの提案です。

20
Tom Castle

ダンノ、これはどう? :)残念ですが、簡潔なバージョンはありません。 GroovyまたはScalaのようなものが必要な場合に使用できます)。

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

あなたが欲しい

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

私はIntelliJを使用していますが、forループのコロンの右側に「式が予期されています」というメッセージが表示されます。

IntelliJも「新しい文字列[]」を自動的に追加するように提案していることを付け加えておきます。

3
dbrown0708