В то время как я пробовал что-то специальное в за цикл, я распознал, что 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".
Действительно ли это - ошибка?
Это будет работать:
for (String crt : new String[]{"a","b","c"} ) {
doSomething();
}
Вы хотите
for (String crt : new String [] {"a","b","c"} ) {
doSomething();
}
Я использую IntelliJ, и он говорит, что поместите сообщение «ожидаемое выражение» в правой части двоеточия в цикле for, что кажется более точным.
Я должен добавить, что IntelliJ также предлагает для меня автоматическое добавление «new String []».
Язык Java предоставляет форму {"a", "b", "c"}
в качестве сокращения, но это возможно только при присваивании. Возможно, это сделано для того, чтобы избежать возможных двусмысленностей при разборе, в некоторых позициях {}
может быть интерпретирован как блок кода.
Правильно было бы сделать так, как предлагает Ной, с new String[]{"a", "b", "c"}
.
Не знаю, что насчет этого? :) Жалко нет емкой версии. Предположим, вы могли бы использовать Groovy или Scala, если хотите что-то подобное :)
for (String s : Arrays.asList("a","b","c")) {
hmm(s);
}