Wie kann ich feststellen, welcher Ausnahmetyp abgefangen wurde, wenn eine Operation mehrere Ausnahmen feststellt?
Dieses Beispiel sollte mehr Sinn machen:
try {
int x = doSomething();
} catch (NotAnInt | ParseError e) {
if (/* thrown error is NotAnInt */) { // line 5
// printSomething
} else {
// print something else
}
}
Wie kann ich in Zeile 5 überprüfen, welche Ausnahme erfasst wurde?
Ich habe if (e.equals(NotAnInt.class)) {..}
versucht, aber kein Glück.
HINWEIS: NotAnInt
und ParseError
sind Klassen in meinem Projekt, die Exception
erweitern.
Wenn Sie die beiden Fälle nicht in separate catch
-Blöcke setzen können, verwenden Sie:
if (e instanceof NotAnInt) {
...
}
dies ist manchmal gerechtfertigt, beispielsweise wenn Sie eine gemeinsame Logik für zwei oder mehr verschiedene Ausnahmeklassen benötigen.
Ansonsten verwenden Sie separate catch
-Blöcke:
} catch (NotAnInt e) {
...
} catch (ParseError e) {
...
}
Verwenden Sie mehrere catch
-Blöcke, einen für jede Ausnahme:
try {
int x = doSomething();
}
catch (NotAnInt e) {
// print something
}
catch (ParseError e){
// print something else
}
Wenn mehrere throws
in einer einzigen catch()
vorhanden sind, können Sie zum Erkennen von welche Ausnahme den Operatorinstanceof
verwenden.
Mit dem Java-Operator instanceof
wird geprüft, ob das Objekteine Instanzdes angegebenen Typs ist (Klasse oder Unterklasse oder Schnittstelle).
Versuchen Sie diesen Code: -
catch (Exception e) {
if(e instanceof NotAnInt){
// Your Logic.
} else if if(e instanceof ParseError){
//Your Logic.
}
}