Алмазный оператор Java не компилируется

Когда я пытаюсь использовать алмазный оператор следующим образом:

List<DateTimeZone> list = new ArrayList<>();

Работает отлично.

Тем не менее, когда я пытаюсь это:

List<DateTimeZone> list = false ? null : new ArrayList<>();

Не компилируется, сообщения: "Несовместимые типы: требуется список, найден ArrayList".

Это почему?

1 ответ

Решение

Тернарный оператор и оператор алмаза не очень хорошо ладят друг с другом. Вы должны указать тип явно:

List<Date> list = false ? null : new ArrayList<Date>();

Больше информации по этим связанным вопросам:

Влияние троичного оператора Java на вывод обобщенного типа

Ошибка компиляции с обобщениями и троичным оператором в JDK 7

Другие вопросы по тегам