Skip to content

Empty in Collections and Iterators

Aleksandr Kuchuk edited this page Aug 6, 2016 · 2 revisions

Введение

Мы часто создаем в наших классах ссылки на какие-то коллекции. Т.е:

public class Hello {
private List<String> names;
/*Some code and logic*/
}

При таком объявлении вы должны в конструкторе создать объект List-а и присвоить его ссылке. Если этого не сделать - names будет равен null, что чревато NPE. Именно для такого случая в Java, в классе Collections есть специальные неизменяемые пустые коллекции.

Empty Collections

Для примера рассмотрим вот такой код: //todo

Пользуясь таким способом мы можем избежать нежелательных NPE.

При этом надо понимать, что вы можете создать объект и присвоить ссылке прямо при объявлении, но данный способ дает вам гибкость в выборе реализации(в разных конструкторах можно использовать разные реализации List), позволяет, при необходимости, рассчитать capacity для коллекции, в зависимости от количества добавляемых элементов. Плюс вы можете вернуть всегда безбоязненно итератор на такую коллекцию.

Empty Iterators

Но пусть вы используете другой подход. //todo пример

Тогда, если вы возвращаете итератор - вы должны проверить, а есть ли объект по ссылке вашей, на коллекцию? Потому что, если нет - NPE ждет вас. Но логичнее возвращать пустой итератор на такую ссылку(хотя спорно, лучше вообще избегать таких вещей). Для этого есть специальный пустой итератор, смотрим код выше.

Вывод

Подобные вещи в классе Collections призваны вас писать более safety код, помогая обойти проблемы с NPE.

Clone this wiki locally