Почему коллекционные литералы? - PullRequest
27 голосов
/ 23 апреля 2010

Из различных онлайн-статей о Java 7 я узнал, что Java 7 будет иметь коллекционные литералы 1 , например:

List<String> fruits = [ "Apple", "Mango", "Guava" ];
Set<String> flowers = { "Rose", "Daisy", "Chrysanthemum" };
Map<Integer, String> hindiNums = { 1 : "Ek", 2 : "Do", 3 : "Teen" }; 

Мои вопросы:

  1. Не было бы возможно обеспечить статический метод of во всех классах коллекций, которые можно использовать следующим образом:

List<String> fruits = ArrayList.of("Apple", "Mango", "Guava");

IMO, это выглядит так же хорошо, как и буквальная версия, и также достаточно кратко. Почему тогда они должны были изобрести новый синтаксис ( РЕДАКТИРОВАТЬ: Под «новым» я имею в виду «новый для Java».)?

  1. Когда я говорю List<String> fruits = [ "Apple", "Mango", "Guava" ];, что List я на самом деле получу? Это будет ArrayList или LinkedList или что-то еще?

1 Как отмечалось в комментариях, литералы коллекции не сделали разрез для Java 7, да и для Java 8. (Вот письмо от Брайана Гетц, разработчик Oracle, резюмирует причины, по которым эта функция не включена, и вот собственно предложение .)

Ответы [ 11 ]

0 голосов
/ 23 апреля 2010

Просто чтобы прояснить один момент - они не "изобрели новый синтаксис".

Я не уверен на 100%, откуда взялась исходная идея, но использование «[]» для обозначения списков и «{}» для обозначения карт существует в Perl (где они используются при создании ссылок на массивы и ссылок на хеш) .

Строго говоря, в perl нет "набора", но наиболее идиоматичной реализацией набора является карта (элемент набора карт равен 1), поэтому "{}" также подходит.

Так что Perl скажет точно то же, что вы перечислили:

$fruits = [ "Apple", "Mango", "Guava" ]; # Creates array reference
$flowers = { "Rose" => 1, "Daisy" => 1, "Chrysanthemum" => 1 };
     # or { map {$_=>1} ("Rose", "Daisy", "Chrysanthemum"))
$hindiNums = { 1 => "Ek", 2 => "Do", 3 => "Teen" }; 

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

...