Инициализируйте массивы с помощью троичного оператора

StackOverflow https://stackoverflow.com/questions/1796791

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top