Краткая инициализация List в Java

А знаете ли вы, что методы с произвольным числом параметров (в отличие от c++ удобно реализованные) и класс Arrays даёт нам в Java возможность быстрой инициализации коллекций почти так же удобно, как в каком-нибудь php:
List<String> list = Arrays.asList("1", "2", "3");
А autoboxing (автоматическое преобразование примитивных типов во врапперы и обратно) позволяет то же самое сделать и с примитивами!
List<Integer> list = Arrays.asList(1, 2, 3);
Чудеса, да и только. В java7 (по слухам) добавят специальные свистелки-перделки для этого. Помимо всякого другого бесполезного годобра.

3 комментария

avatar
  • MpaK
  • 0
гык :) я мягко говоря даже ничего не понял, кроме что разные типы у тебя объектов list получаются…
avatar
Дело в том, что в Java нельзя инициализировать коллекции, типа того, как например в php
$map = array("key1"=>"value1","key2"=>"value2");
То есть задать предустановленные значения нельзя. Правда, для одного особого объекта — массива — можно вместо
int[] array=new int[];
array[1]=1;
array[2]=2;
array[3]=3;
написать
int[] array={1,2,3};
Чтобы сделать, например, список значений надо руками его забить:
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");

Так всегда и делают, по другому никак. Можно это всё инициализировать в методе каком-нибудь или в конструкторе класса, а можно запихать в static-блок вначале класса, тогда это само при подгрузке класса загрузчиком, но тем не менее этого кода не избежать:
public class Foo
{
private List<String> list = new ArrayList<String>();
public Foo()
{
list.add("1");
list.add("2");
list.add("3");
}
...
}

И иногда заёбывает забивать какие-нибудь константные hashmap. Способ описанный мной даёт возможность покороче записать инициализацию коллекиции List, просто пишешь
public class Foo
{
private List<String> list = Arrays.asList("1", "2", "3");
...
}
и всё тут. static-метод описываемый как
public static <T> List<T> asList(T... a)
сам превращает список параметров произвольной длины generic-типа T в коллекцию объектов типа T.
avatar
  • MpaK
  • 0
ух как…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.