Здравствуйте, хаброжители. Наконец дошли руки написать что-то на хабр. Первая статья была немного скучной и узкоспециализированной. Поэтому я пишу в песочницу во второй раз. (UPD но почему то попал не в песочницу оО)
На этот раз речь пойдет о нововведениях Java. А именно про ImmutableCollections. Вы наверное где-то уже использовали List.of(). Скорее всего в тестах, ибо какой-то практической нужды в них нет. Но даже в тестах можно наткнуться на банальные подводные камни. Банальны они по причине того, что разок прочитав их код, сразу все становится на свои места, но остается очень и очень много вопросов, почему сделанно именно так, а не по другому.
Начнем пожалуй с интерфейса List, в котором есть статические функции of.
List<E> List<E>.<E>of(E e1);
List<E> List<E>.<E>of(E e1, E e2);
List<E> List<E>.<E>of(E e1, E e2, E e3);
List<E> List<E>.<E>of(E e1, E e2, E e3, E e4);
List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5);
List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5, E e6);
List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5, E e6, E e7);
List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8);
List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9);
List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10);
List<E> List<E>.<E>of(E... elements)
Зачем же в джаве столько методов??? Долго я задавался этим вопросом, но никак не доходили руки порыться в source коде и погуглить. Сегодня таки я нашел ответ, который меня абсолютно неудовлетворил.
The fixed argument overloaded methods are provided to save the overhead of array-allocation, initialization and garbage collection in case of vararg calls.
Читать дальше →
List.of() и все, все, все…
Source: habrahabr


