wake-up-neo.net

Wie kann geprüft werden, welcher Ausnahmetyp in Java ausgelöst wurde?

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.

14
jean

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) {
    ...
}
27
Erik Allik

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
}
6
DavidGSola

Wenn mehrere throws in einer einzigen catch() vorhanden sind, können Sie zum Erkennen von welche Ausnahme den Operatorinstanceofverwenden.

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.
            }
      }
1
anoopknr