Почему так можно:
ArrayList
А так нельзя:
ArrayList
Почему так сделали?
Ответ
Используя так называемый double-brace initialization, вы создаёте новый анонимный класс. Когда в Java-7 разрешили опускать аргументы типа в некоторых случаях, одним из исключений, явно прописанным в стандарте, являются как раз анонимные классы:
It is a compile-time error if a class instance creation expression declares an anonymous class using the "<>" form for the class's type arguments.
Тут нет каких-то принципиальных ограничений, просто усложняло вывод типов в компиляторе, потому что есть много частных случаев. Поэтому недоделали. В Java-9 планируют исправить этот момент — смотрите баг JDK-8073593
В заключение скажу, что double-brace initialization — исключительно дурацкий способ инициализации объектов. У него могут быть неожиданные проблемы: от случайного захвата контекста внешнего класса до смены serialVersionID. В вашем случае это вообще не нужно. Пишите так:
List
А если не собираетесь в будущем добавлять и удалять элементы в список, то лучше так:
List
Но даже если б у вас была Map, лучше заведите отдельный метод, фабрику или билдер, который создаёт предопределённые Map, но не делайте double-brace initialization.
В той же девятке, кстати, планируется упростить этот момент — смотрите JDK-8048330. Будет можно писать
List
Комментариев нет:
Отправить комментарий