Nigdy nie wyrzucam NullPointerException. Dla mnie jest to ten, który pojawia się naturalnie w kodzie, gdy coś idzie nie tak i wymaga od programisty przyjrzenia się temu, co się dzieje. Następnie naprawia przyczynę i nie dzieje się to ponownie.
Używam IllegalStateException do sygnalizowania, że obiekt jest nieprawidłowo skonfigurowany lub że połączenia są w nieprawidłowej kolejności. Wszyscy jednak doskonale wiemy, że obiekt powinien upewnić się, że nie może być w złym stanie i że nie można go wywołać w niewłaściwej kolejności (zrobić konstruktora i wynikowy obiekt ...).
Używam dużo IllegalArgumentException, gdy metoda wykryje, że jej parametry są nieprawidłowe. Jest to obowiązkiem każdej publicznej metody, aby przerwać przetwarzanie (aby uniknąć pośrednich błędów, które są trudniejsze do zrozumienia). Również kilka if
s na początku metody służy celowi dokumentacji (dokumentacji, która nigdy nie odbiega od kodu, ponieważ jest to kod :-)).
public void myMethod(String message, Long id) {
if (message == null) {
throw new IllegalArgumentException("myMethod's message can't be null");
// The message doesn't log the argument because we know its value, it is null.
}
if (id == null) {
throw new IllegalArgumentException("myMethod's id can't be null");
// This case is separated from the previous one for two reasons :
// 1. to output a precise message
// 2. to document clearly in the code the requirements
}
if (message.length()<12) {
throw new IllegalArgumentException("myMethod's message is too small, was '" + message + "'");
// here, we need to output the message itself,
// because it is a useful debug information.
}
}
Używam również szczególne wyjątki Runtime sygnalizować wyższy poziom wyjątkowe warunki.
Na przykład, jeśli moduł mojej aplikacji nie można uruchomić, mogę mieć ModuleNotOperationalException rzucony (najlepiej za pomocą kodu generycznego niczym kolektora, inaczej określonym kodem), gdy inny moduł nazywa. Po tej decyzji architektonicznej, każdy moduł musi poradzić sobie z tym wyjątkiem w operacjach, które wywołują inne moduły ...
Wielkie punkty człowiek !! –
Wielka lista; Dodałbym UnsupportedOperationException, którego używam cały czas z konkretnymi implementacjami interfejsów kolekcji. – Carl
Świetna odpowiedź. Zwrócę większą uwagę na wyjątek IllegalStateException w przyszłości! – reef