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

В то время как я пробовал что-то специальное в за цикл, я распознал, что Java, кажется, не нравится исправлять анонимный массив как источник для for-each-loop:

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

на самом деле не работает в то время как

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

делает.

Даже кастинг массива для Строкового представления [] не помогает. При перемещении курсора через первую версию затмение говорит мне:

Type mismatch: cannot convert from String[] to String при значении "crt".

Действительно ли это - ошибка?

36
задан Atmocreations 1 March 2010 в 20:29
поделиться

4 ответа

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

for (String crt : new String[]{"a","b","c"} ) {
    doSomething();
}
66
ответ дан 27 November 2019 в 05:27
поделиться

Вы хотите

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

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

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

3
ответ дан 27 November 2019 в 05:27
поделиться

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

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

20
ответ дан 27 November 2019 в 05:27
поделиться

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

for (String s : Arrays.asList("a","b","c")) {
    hmm(s);
}
4
ответ дан 27 November 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: