Инициализация массивов с использованием тернарного оператора

Я попробовал что-то вроде этого:


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}, если вы хотите использовать инициализатор.