it-swarm.com.de

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