Действительно распространенная «проблема» в Java.
Сначала мои мысли по этому поводу:
Я считаю, что плохо «что-то есть», когда передается NULL, где NULL не является допустимым значением. Если вы не выходите из метода с какой-либо ошибкой, это означает, что в вашем методе ничего не пошло не так, что неверно. Тогда вы, вероятно, вернете нуль в этом случае, а в методе получения вы снова проверяете на ноль, и он никогда не заканчивается, и в итоге вы получаете «if! = Null» и т. Д.
Итак, IMHO, null должен быть критической ошибкой, которая препятствует дальнейшему выполнению (то есть, когда null не является допустимым значением).
Способ решения этой проблемы:
Во-первых, я следую этому соглашению:
- Все открытые методы / API всегда проверяют свои аргументы на нуль
- Все приватные методы не проверяют на null, так как они являются контролируемыми методами (просто дайте умереть с исключением nullpointer, если он не был обработан выше)
- Единственными другими методами, которые не проверяют на нулевое значение, являются служебные методы. Они общедоступны, но если вы по каким-то причинам вызываете их, вы знаете, какие параметры вы передаете. Это все равно что пытаться кипятить воду в чайнике без воды ...
И, наконец, в коде первая строка открытого метода выглядит следующим образом:
ValidationUtils.getNullValidator().addParam(plans, "plans").addParam(persons, "persons").validate();
Обратите внимание, что addParam () возвращает self, так что вы можете добавить дополнительные параметры для проверки.
Метод validate()
будет выбрасывать проверено ValidationException
, если какой-либо из параметров имеет значение null (проверено или не отмечено, это больше проблема дизайна / вкуса, но мой ValidationException
проверен).
void validate() throws ValidationException;
Сообщение будет содержать следующий текст, если, например, "plans "пусто:
" Недопустимое значение аргумента null для параметра [планы] "
Как вы можете видеть, второе значение в методе (строке) addParam () необходимо для пользовательского сообщения, потому что вы не можете легко определить переданное имя переменной, даже с отражением (в любом случае это не тема этого поста). .).
И да, мы знаем, что за этой строкой мы больше не встретим нулевое значение, поэтому мы просто безопасно вызываем методы для этих объектов.
Таким образом, код является чистым, легко обслуживаемым и читаемым.