Kann ich mehrere Java-Ausnahmen in derselben Fangklausel erfassen?
In Java, ich möchte so etwas wie dies tun:
try {
...
} catch (IllegalArgumentException, SecurityException,
IllegalAccessException, NoSuchFieldException e) {
someCode();
}
...statt:
try {
...
} catch (IllegalArgumentException e) {
someCode();
} catch (SecurityException e) {
someCode();
} catch (IllegalAccessException e) {
someCode();
} catch (NoSuchFieldException e) {
someCode();
}
Gibt es eine Möglichkeit, dies zu tun?
InformationsquelleAutor der Frage froadie | 2010-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist möglich,seit Java 7. Die syntax der try-catch-block:
Vor Java 7 war dies nicht möglich. Denken Sie aber daran, wenn alle Ausnahmen gehören zu der gleichen Klasse der Hierarchie, können Sie einfach die zu fangen, die Basis-exception-Typ. Der einzige andere Weg ist, fangen jede Ausnahme in Ihren eigenen catch-block.
Edit: Beachten Sie, dass in Java 7, können Sie nicht fangen beide außergewöhnlich leichte und ExceptionB in dem gleichen block, wenn ExceptionB übernommen wird, die entweder direkt oder indirekt aus der außergewöhnlich leichte. Der compiler wird sich beschweren:
The exception ExceptionB is already caught by the alternative ExceptionA
.InformationsquelleAutor der Antwort OscarRyz
Nicht genau vor Java 7, aber ich würde etwas wie das hier tun:
Java 6 und vor
Java 7
InformationsquelleAutor der Antwort user454322
Innerhalb von Java 7 können Sie festlegen, mehrere catch-Klauseln wie:
InformationsquelleAutor der Antwort crusam
Nein, eine pro Kunde.
Können Sie fangen eine Unterklasse wie java.lang.Ausnahme, so lange wie Sie nehmen Sie die gleiche Aktion in allen Fällen.
Aber, dass vielleicht nicht die beste Praxis. Sollten Sie nur fangen eine Ausnahme, wenn Sie eine Strategie für die Fehlerbehandlung und-Protokollierung und erneute auslösen ist nicht "umgehen". Wenn Sie nicht über eine korrigierende Aktion, besser, um es in die Signatur der Methode und lassen Sie es sprudeln, um jemanden, der die situation im Griff.
InformationsquelleAutor der Antwort duffymo
Wenn es eine Hierarchie von Ausnahmen Sie können die base-Klasse zu fangen alle Unterklassen von Ausnahmen. In dem entarteten Fall, dass Sie fangen kann alle Java-Ausnahmen:
In einer allgemeineren Fall, wenn RepositoryException ist die Basisklasse und PathNotFoundException ist eine abgeleitete Klasse dann:
Dem obigen code wird fangen RepositoryException und PathNotFoundException für eine Art von exception-handling und alle anderen Ausnahmen werden in einen Topf geworfen.
Seit Java 7 pro @OscarRyz die Antwort von oben:
InformationsquelleAutor der Antwort Michael Shopsin
Einen Reiniger (aber weniger ausführlich, und vielleicht nicht so bevorzugte) alternative zu user454322 s Antwort auf Java 6 (d.h., Android) wäre, alle zu fangen
Exception
s-und re-throwRuntimeException
s. Dies würde nicht funktionieren, wenn Sie planen, fangen andere Arten von Ausnahmen, die weiter oben auf den stack (es sei denn, Sie auch neu zu werfen), aber effektiv fangen alle überprüft Ausnahmen.Zum Beispiel:
Dass gesagt wird, für die Ausführlichkeit, ist es möglicherweise am besten, ein boolescher Wert oder eine andere variable und basiert auf, dass Sie einige code, der nach dem try-catch-block.
InformationsquelleAutor der Antwort Oleg Vaskevich
In pre-7, wie etwa:
InformationsquelleAutor der Antwort Bill S
Fangen Sie die Ausnahme, das passiert zu sein eine übergeordnete Klasse in der exception-Hierarchie. Dies ist natürlich schlechte Praxis. In deinem Fall, das " gemeinsame übergeordnete Element Ausnahme ist ausgerechnet der Exception-Klasse und fangen jede Ausnahme ist eine Instanz der Ausnahme, in der Tat ist schlechte Praxis - Ausnahmen wie NullPointerException, sind in der Regel Fehler in der Programmierung und sollte in der Regel behoben werden, indem null-Werte.
InformationsquelleAutor der Antwort Vineet Reynolds