2.13. Возврат нулевой ссылки

Зачастую, если метод, который должен возвращать объект, не находит этого объекта, он возвращает null. К сожалению, клиенты, как правило, забывают проверить результат метода и обращаются к нему сразу, что может привести к неожиданному исключению NullPointerException [11, 13].

Поэтому лучше хотя бы бросить проверяемое исключение. Но обработка такого исключения занимает довольно много времени и несколько загромождает код. В некоторых случаях можно все же вернуть объект, полностью поддерживающий интерфейс соответствующей абстракции, но ведущий себя как «отсутствие объекта».

Например, если метод возвращает массив или коллекцию, лучше вернуть пустой массив или пустую коллекцию. Чтобы не создавать много пустых объектов, можно создать их один раз и запомнить. Пустые коллекции уже созданы и доступны в классе Collections.

Однако не только в случае коллекции можно создавать «пустые» объекты. Например, при реализации связных структур вместо нулевой ссылки можно использовать специальные объекты, реализующие конец списка или лист красно–черного дерева. Такие объекты не позволят продолжить итерацию за пределы структуры и избавят от проверок на null.