Подтвердить что ты не робот

Java: "Анонимный" массив в for-each-loop

Пока я пытался что-то особенное для цикла, я понял, что Java, похоже, не любит помещать анонимный массив в качестве источника для каждого цикла:

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".

Это ошибка?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Вы хотите

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

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

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