Я использую исключения, чтобы поймать проблемы рано. Например:
public int getAverageAge(Person p1, Person p2){
if(p1 == null || p2 == null)
throw new IllegalArgumentException("One or more of input persons is null").
return (p1.getAge() + p2.getAge()) / 2;
}
Моя программа никогда не должна переходить null
в эту функцию. Я никогда не собираюсь этого делать. Однако, как мы все знаем, непредвиденные вещи случаются в программировании.
Выдав исключение, если возникает эта проблема, я могу обнаружить и исправить ее, прежде чем она вызовет больше проблем в других местах программы. Исключение останавливает программу и сообщает мне, что «здесь произошло что-то плохое, исправьте это». Вместо этого null
перемещение по программе вызывает проблемы в других местах.
Теперь, вы правы, в этом случае null
это просто вызвало бы NullPointerException
сразу, так что это может быть не лучшим примером.
Но рассмотрим метод, такой как этот, например:
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
В этом случае null
параметр a будет передаваться по программе и может привести к ошибкам намного позже, что будет трудно отследить до их происхождения.
Меняем функцию так:
public void registerPerson(Person person){
if(person == null) throw new IllegalArgumentException("Input person is null.");
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
Позволяет мне обнаружить проблему намного раньше, чем она вызовет странные ошибки в других местах.
Кроме того, null
ссылка в качестве параметра является лишь примером. Это может быть много разных проблем, от недопустимых аргументов до чего-то еще. Всегда лучше заметить их рано.
Поэтому мой вопрос прост: это хорошая практика? Хорошо ли мое использование исключений в качестве инструментов для предотвращения проблем? Это законное применение исключений или это проблематично?