Инициализируйте массивы с помощью троичного оператора
-
22-09-2019 - |
Вопрос
я пробовал что-то вроде этого:
boolean funkyBoolean = true;
int array[] = funkyBoolean ? {1,2,3} : {4,5,6};
Но этот код даже не будет компилироваться.Есть ли этому какое-то объяснение?это не так funkyBoolean ? {1,2,3} : {4,5,6}
допустимое выражение?заранее благодарю!
Решение
Вы можете использовать только {1, 2, 3}
синтаксис в очень ограниченных ситуациях, и это не одна из них.Попробуй это:
int array[] = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};
Кстати, хороший стиль Java — написать объявление так:
int[] array = ...
РЕДАКТИРОВАТЬ:Для справки, причина того, что {1, 2, 3}
настолько ограничен, что его тип неоднозначен.Теоретически это может быть массив целых чисел, длинных чисел, чисел с плавающей запятой и т. д.Кроме того, грамматика Java, определенная JLS, запрещает это, вот и все.
Другие советы
boolean funkyBoolean = true;
int[] array = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};
Инициализатор массива может быть указан в объявлении или как часть выражения для создания массива (§15.10), создавая массив и предоставляя некоторые начальные значения
Это то, что Спецификация Java говорит (10.6).Таким образом, "короткая" версия (с выражением создания) разрешена только в объявлениях (int[] a = {1,2,3};
), во всех остальных случаях вам понадобится new int[]{1,2,3}
сконструируйте, если вы хотите использовать инициализатор.