23 мая 2013 г.

Век живи - век учись: создание и заполнение коллекции через Double Brace Initialization


Как в Java одним выражением создать поле с коллекцией (List, Set и т.п.) или Map и заполнить коллекцию начальными значениями (не создавая в классе дополнительных методов/инициализаторов/конструкторов)?


Можно так:


List<String> cars = new ArrayList<String>(Arrays.asList("Volvo", "BMW", "Ferrari"));
Этот способ хорошо работает только с коллекциями, для наполнения Map он подходит с трудом.

А можно взорвать мозг и сделать вот так:

List<String> cars = new ArrayList<String>() {
{
add("Volvo");
add("BMW");
add("Ferrari");
}
};

Map<String, Integer> carRatings = new HashMap<String, Integer>() {
{
put("Volvo", 1);
put("BMW", 2);
put("Ferrari", 3);
}
};

Это вызов анонимного конструктора анонимного субкласса. Оригинал статьи: A bet you don’t know about these in Java!


Комментариев нет:

Отправить комментарий