Używam wyjątków, aby wcześnie wychwytywać problemy. Na przykład:
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;
}
Mój program nigdy nie powinien przejść nulltej funkcji. Nigdy tego nie zamierzam. Jednak, jak wszyscy wiemy, w programowaniu zdarzają się niezamierzone rzeczy.
Zgłoszenie wyjątku, jeśli wystąpi ten problem, pozwala mi go wykryć i naprawić, zanim spowoduje więcej problemów w innych miejscach programu. Wyjątek zatrzymuje program i mówi mi: „wydarzyły się tutaj złe rzeczy, napraw je”. Zamiast tego nullporuszać się po programie, powodując problemy w innym miejscu.
Masz rację, w tym przypadku po nullprostu spowodowałoby to NullPointerExceptionod razu, więc może nie być najlepszym przykładem.
Ale rozważ taką metodę jak na przykład:
public void registerPerson(Person person){
persons.add(person);
notifyRegisterObservers(person); // sends the person object to all kinds of objects.
}
W takim przypadku nullparametr a byłby przekazywany dookoła programu i może powodować błędy znacznie później, co będzie trudne do odtworzenia.
Zmiana funkcji tak:
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.
}
Pozwala mi dostrzec problem znacznie, zanim spowoduje dziwne błędy w innych miejscach.
Ponadto, nullodniesienia jako parametr jest jedynie przykładem. Może to być wiele problemów, od nieprawidłowych argumentów po cokolwiek innego. Zawsze lepiej jest je wcześnie wykryć.
Więc moje pytanie brzmi: czy to dobra praktyka? Czy moje wykorzystanie wyjątków jako narzędzi zapobiegających problemom jest dobre? Czy jest to uzasadnione stosowanie wyjątków, czy może jest problematyczne?