Знаете ли вы какую-нибудь хорошую альтернативу Apache Commons Validate или Предварительные условия Guava, которые будет генерировать исключение IllegalArgumentException вместо NullPointerException при проверке, является ли объект не нулевым (кроме Spring Assert)?
Мне известно, что Javadocs скажите:
Приложения должны генерировать экземпляры этого класса [NullPointerException], чтобы указать на другое незаконное использование нулевого объекта.
Тем не менее мне это просто не нравится. Для меня NPE всегда означало, что я просто забыл где-то защитить нулевую ссылку. Мои глаза настолько натренированы, что я мог заметить, что он просматривает журналы со скоростью несколько страниц в секунду, и если я это сделаю, в моей голове всегда будет включено предупреждение об ошибке. Поэтому для меня было бы довольно сложно получить его там, где я ожидаю IllegalArgumentException.
Скажем, у меня есть фасоль:
public class Person {
private String name;
private String phone;
//....
}
и способ обслуживания:
public void call(Person person) {
//assert person.getPhone() != null
//....
}
В каком-то контексте может быть нормально, что у человека нет телефона (у моей бабушки его нет). Но если вы хотите позвонить такому человеку, для меня это вызов метода call с переданным IllegalArgument. Посмотрите на иерархию - NullPointerException даже не является подклассом IllegalArgumentException. По сути, он сообщает вам: Вы снова пытались вызвать метод получения по нулевой ссылке.
Кроме того, уже были обсуждения, и есть этот хороший ответ, который я полностью поддерживаю. Итак, мой вопрос - нужно ли мне делать такие уродливые вещи:
Validate.isTrue(person.getPhone() != null, "Can't call a person that hasn't got a phone");
чтобы все было по-своему, или есть библиотека, которая просто выбрасывает IllegalArgumentException для проверки notNull?
null
, но оно сводится к тому же: метод вызывается сnull
, переданным для параметра, который не может бытьnull
, что в равной степени является ошибкой программиста. - person ColinD   schedule 04.05.2015java.util.Objects.requireNotNull
и друзья a > Кидай НПЕ. - person Olivier Grégoire   schedule 05.05.2015