Найти тему
Zen coder

Почему возвращать null в Java - плохая практика и что с этим делать?

Почему возвращать null - это плохая практика:

1. Если метод может возвращать null, то вызывающий код обязан проверять на null полученные от метода данные. Иначе есть риск получить Null Pointer Exception при работе с этими данными. Это очень сильно загромождает код, обязуя проверить все данные на null каждый раз.

2. В разработке ПО всегда надо использовать FailFast подход, для раннего обнаружения ошибок. Если метод вернул null, а вызывающий код не проверяя передает его дальше, например кладет его в коллекцию или в поле другого объекта, то это бомба, которая взорвется в неожиданном месте, совершенно в другом куске кода, очень далеко от метода, который этот null вернул. Это нарушает FailFast подход и очень затрудняет поиск «виновника» из-за которого возник Null Pointer Exception.

А как методу сообщить о проблеме, не используя null.

1. Если ситуация не штатная - выбросить исключение (например objectNotFound).

2. Если ситуация нормальная, и нам может вернуться «ничто», то вместо null возвращайте Null-объект, который представляет собой некий объект, возвращаемый по умолчанию.

Null-объект наследуется от основного объекта, в обоих классах создается метод isNull(), который будет возвращать true для Null-объекта и false для реального класса. Там где требуется, проверяем object.isNull().

3. Возвращать Optional вместо null, этот тип указывает на возможный возврат пустого значения. Наличие Optional в сигнатуре метода четко указывает на необходимость проверки на пустое значение.

4. Если все же по какой-то причине метод возвращает null, об этом следует предупредить клиентов метода, например добавив в сигнатуру аннотацию @Nullable.

#программирование #java #java для новичков #java для чайников