Алмазный оператор 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