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

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

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

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

Showing example

Empty Iterators

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

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

Вывод

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

Clone this wiki locally