Ten temat pojawił się dziś w dyskusji z kolegą.Jakie jest zamierzone użycie wyjątku IllegalStateException?
Javadocs dla IllegalStateException
stanu Java, że:
Sygnały, że metoda została przywołana w nielegalnym lub niewłaściwym czasie. Innymi słowy, środowisko Java lub aplikacja Java nie są w odpowiednim stanie dla żądanej operacji.
I Efektywna Java mówi (punkt 60, strona 248):
Innym powszechnie ponownie wykorzystane Wyjątkiem jest IllegalStateException. Jest to generalnie wyjątek do rzucania, jeśli wywołanie jest nielegalne z powodu stanu obiektu odbierającego. Na przykład byłby to wyjątek do rzucania, jeśli osoba wywołująca próbowała użyć jakiegoś obiektu, zanim został poprawnie zainicjowany.
Wygląda na to, że jest tu trochę rozbieżności. W drugim zdaniu javadocs brzmi to tak, jakby wyjątek mógł opisywać bardzo szeroki warunek dotyczący stanu wykonania Java, ale opis w Effective Java sprawia, że brzmi on tak, jakby był używany w warunkach związanych konkretnie ze stanem stanu obiektu, którego metoda została wywołana.
Zastosowania, które widziałem w JDK (np. Kolekcje, Matcher
) oraz w Guava zdecydowanie wydają się należeć do kategorii, o której mówi efektywna Java ("Ten obiekt jest w stanie, w którym ta metoda nie może być nazwana "). Wydaje się to również zgodne z rodzajem IllegalStateException
rodzeństwa IllegalArgumentException
.
Czy są jakieś uzasadnione zastosowania w JDK w zakresie IllegalStateException
, które odnoszą się do "środowiska Java" lub "aplikacji Java"? Lub czy przewodniki najlepszych praktyk zalecają korzystanie z niego w szerszym stanie realizacji? Jeśli nie, dlaczego do cholery są sformułowane w ten sposób javadoki? ;)
Być może nie ma to związku, zauważyłem, zauważyłem, że tag StackOverflow [nielegstatexception] mówi: "W Javie wyjątek, który występuje podczas używania wielu wątków, przy czym jeden wątek modyfikuje obiekt w sposób, który czyni go niekompatybilnym z użyciem tego obiektu w drugim wątku, w ten sposób wprowadzając przedmiot w nielegalne państwo. ". Huh? Skąd to pochodzi? –
"Aplikacja Java" to ta, którą piszesz, i możesz użyć "IllegalStateException" (bezpośrednio lub z powodu używania Guava, na przykład). Gdzie ta rozbieżność? –
Witryna tagów wygląda nieprawdopodobnie, przedłożyłam edycję, pożyczając od tego pytania swobodnie; powinieneś zobaczyć nową wersję po przejściu recenzji peer. – meriton