Инициализация массивов с использованием тернарного оператора
Я попробовал что-то вроде этого:
boolean funkyBoolean = true;
int array[] = funkyBoolean ? {1,2,3} : {4,5,6};
Но этот код даже не будет компилироваться.
Есть ли объяснения для этого? не является funkyBoolean ? {1,2,3} : {4,5,6}
допустимым выражением?
Благодарю заранее!
Ответы
Ответ 1
Синтаксис {1, 2, 3}
можно использовать только в очень ограниченных ситуациях, и это не один из них. Попробуйте следующее:
int array[] = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};
Кстати, хороший стиль Java заключается в том, чтобы написать объявление как:
int[] array = ...
EDIT: для записи причина, по которой {1, 2, 3}
настолько ограничена, что ее тип неоднозначен. Теоретически это может быть массив целых чисел, longs, floats и т.д. Кроме того, грамматика Java, определенная JLS, запрещает ее, так что это.
Ответ 2
boolean funkyBoolean = true;
int[] array = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};
Ответ 3
Можно указать инициализатор массива в декларации или как часть выражение создания массива (§15.10), создавая массив и предоставляя некоторые начальные значения
Что то, что Java Spec говорит (10.6). Таким образом, "короткая" версия (с выражением создания) допускается только в объявлениях (int[] a = {1,2,3};
), во всех остальных случаях вам нужна конструкция new int[]{1,2,3}
, если вы хотите использовать инициализатор.