Java: анонимный массив в цикле for-each - PullRequest
34 голосов
/ 01 марта 2010

Пока я пробовал что-то особенное в цикле 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".

Это ошибка?

Ответы [ 4 ]

64 голосов
/ 01 марта 2010

Это будет работать:

for (String crt : new String[]{"a","b","c"} ) {
    doSomething();
}
20 голосов
/ 01 марта 2010

Язык Java предоставляет форму {"a","b","c"} в качестве ярлыка, но это возможно только во время назначения. Возможно, это позволяет избежать возможных неоднозначностей во время синтаксического анализа, в некоторых позициях {} может интерпретироваться как блок кода.

Правильный способ сделать это будет, как предполагает Ной, с new String[]{"a","b","c"}.

4 голосов
/ 01 марта 2010

Не знаю, а как насчет этого? :) Жаль, что нет краткой версии. Предположим, вы можете использовать Groovy или Scala, если хотите что-то подобное:)

for (String s : Arrays.asList("a","b","c")) {
    hmm(s);
}
3 голосов
/ 01 марта 2010

Вы хотите

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

Я использую IntelliJ, и он говорит, что поместите сообщение «ожидаемое выражение» справа от двоеточия в цикле for, что кажется более точным.

Я должен добавить, что IntelliJ также предлагает автоматически добавить «новую строку []» для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...