openjdk.ruOpenJDK на русском

JEP 186: Collection Literals

Литералы коллекций

ОтветственныйBrian Goetz
ТипFeature
ОбластьJDK
СтатусClosed / Withdrawn
Компонентspecification / language
Обсуждениеlambda dash dev at openjdk dot java dot net
ТрудоёмкостьS
ДлительностьS
Связан сJEP 269: Convenience Factory Methods for Collections
Создан2013/06/20 20:00
Обновлён2022/06/28 14:04
Задача8046176

Аннотация

Литерал коллекции — это синтаксическая форма выражения, значением которой является агрегатный тип, например массив, List или Map. Литералы коллекций поддерживаются во многих языках. Литерал List в Java мог бы выглядеть так:

List<Integer> list = #[ 1, 2, 3 ];

Литералы коллекций предлагались для проекта Coin и естественным образом дополняют новые возможности библиотек в Java SE 8. Литералы коллекций могут сократить объём шаблонного кода, повысить производительность и безопасность.

Цели

Это исследовательский JEP. Единственная цель этого JEP — изучить пространство проектных решений в достаточной мере, чтобы можно было предложить JEP для конкретной возможности (или рекомендовать не заниматься этой возможностью).

Что не является целью

Создание готовой к промышленному использованию реализации или спецификации не является целью этого исследовательского JEP.

Критерии успеха

Этот исследовательский JEP будет считаться успешным, если в его результате появится проект, который мы захотим развить в JEP для конкретной возможности, или же появится уверенность, что мы не хотим продолжать работу над этой возможностью.

Мотивация

Литералы коллекций могут повысить продуктивность программистов, читаемость и безопасность кода.

Описание

Возможность инициализировать массивы, списки, множества и отображения компактным выражением даёт много преимуществ, в том числе:

  • Ясность (меньше кода, и он проще);
  • Динамический объём памяти (размер известен, поэтому можно выбрать экономную по памяти реализацию); и
  • Безопасность (результирующий объект можно сделать неизменяемым).

Хотя минимальное решение, работающее для массивов, List и Map, было бы «тривиальным», мы хотели бы выйти за рамки такого упрощённого решения и использовать типизацию по целевому типу (target typing), что, возможно, позволит применять эту возможность к расширяемому набору типов.