Czy właściwe jest użycie, gdy klasa nie implementuje metody, ale klasy potomne mogą to zrobić? Innymi słowy, mieć metodę abstrakcyjną w klasie nieabstrakcyjnej.
osa
@SergeyOrshanskiy Przydaje się, gdy w zależności od tego, jak zbudujesz obiekt, musisz utworzyć anonimową klasę, która implementuje interfejs w celu utworzenia instancji zmiennej członka, ale nie chcesz, aby była używana. Jeśli go ustawisz nulli przypadkowo użyjesz go (lub zrobił to ktoś inny), otrzymasz, NullPointerExceptionsco jest mniej oczywiste niż UnsupportedOperationExceptionsw tym przypadku. Tylko przykład.
@JarrodRoberson OK, w takim przypadku taka instrukcja powinna zostać naprawdę usunięta z dokumentacji klasy. Wydaje się, że wyjątek jest używany przez inne pakiety. Myślę, że jeśli Oracle to zrobi, to powinniśmy. Złożę raport o błędzie.
Maarten Bodewes
1
Pamiętaj, że jest to niezaznaczoneRuntimeException . W czasie kompilacji nie otrzymasz żadnej opinii ani pomocy w postępowaniu z tymi wyjątkami. Jeśli jest to używane w przypadku metody pośredniczącej lub w toku, powinieneś użyć pewnego rodzaju sprawdzonego wyjątku.
TastyWheat
221
Rozróżnij dwa wymienione przypadki:
Aby wskazać, że żądana operacja nie jest obsługiwana i najprawdopodobniej nigdy nie będzie, rzuć UnsupportedOperationException.
Aby wskazać, że żądana operacja nie została jeszcze zaimplementowana, wybierz jedną z następujących opcji:
Idę z tym, ponieważ wydaje mi się to rozsądne. „Jeszcze” lub „nigdy” wskazane przez wyjątek daje wyobrażenie o tym, jak na to zareagować.
sschrass
3
# 1 lub 2 są w praktyce znacznie lepsze. # 3 przechwytuje semantyczne rozróżnienie między „nieobsługiwany” a „nie zaimplementowany”, ale posiadanie osobnej klasy ułatwia szybkie wyszukiwanie w celu sprawdzenia, czy nie zapomniałeś zaimplementować czegokolwiek, co powinieneś zrobić.
Sean U
4
# 3 jest najlepszy dla niezaimplementowanych metod, ponieważ nie wymaga biblioteki innej firmy ani dodatkowej pracy, nawet jeśli jest to commons-lang.
JoshDM
28
Jeśli utworzysz nową (jeszcze nie zaimplementowaną) funkcję w NetBeans , wygeneruje ona treść metody z następującą instrukcją:
null
i przypadkowo użyjesz go (lub zrobił to ktoś inny), otrzymasz,NullPointerExceptions
co jest mniej oczywiste niżUnsupportedOperationExceptions
w tym przypadku. Tylko przykład.Odpowiedzi:
java.lang.UnsupportedOperationException
źródło
RuntimeException
. W czasie kompilacji nie otrzymasz żadnej opinii ani pomocy w postępowaniu z tymi wyjątkami. Jeśli jest to używane w przypadku metody pośredniczącej lub w toku, powinieneś użyć pewnego rodzaju sprawdzonego wyjątku.Rozróżnij dwa wymienione przypadki:
Aby wskazać, że żądana operacja nie jest obsługiwana i najprawdopodobniej nigdy nie będzie, rzuć
UnsupportedOperationException
.Aby wskazać, że żądana operacja nie została jeszcze zaimplementowana, wybierz jedną z następujących opcji:
Użyj
NotImplementedException
z Apache Commons-Lang , który był dostępny w świetlicy-LANG2 stał i został ponownie dodany do świetlicy-lang3 w wersji 3.2.Zrealizuj własne
NotImplementedException
.Rzuć
UnsupportedOperationException
z komunikatem typu „Jeszcze nie zaimplementowano”.źródło
Jeśli utworzysz nową (jeszcze nie zaimplementowaną) funkcję w NetBeans , wygeneruje ona treść metody z następującą instrukcją:
Dlatego zalecam użycie wyjątku UnsupportedOperationException .
źródło
Jeśli chcesz uzyskać większą szczegółowość i lepszą opis, możesz użyć NotImplementedException od commons-lang
Ostrzeżenie: Dostępne tylko przed wersją 2.6 i po wersji 3.2.
źródło