2014-12-03 11 views
5

Wie kann ich feststellen, welche Art von Ausnahme abgefangen wurde, wenn eine Operation mehrere Ausnahmen erfasst?Java - Wie überprüft man, welcher Exception-Typ ausgelöst wurde?

sollte dieses Beispiel mehr Sinn machen:

try { 
    int x = doSomething(); 
} catch (NotAnInt | ParseError e) { 
    if (/* thrown error is NotAnInt */) { // line 5 
    // printSomething 
    } else { 
    // print something else 
    } 
} 

Zeile 5, wie kann ich überprüfen, welche Ausnahme gefangen wurde?

Ich versuchte if (e.equals(NotAnInt.class)) {..} aber kein Glück.

HINWEIS: NotAnInt und ParseError sind Klassen in meinem Projekt, die Exception erweitern.

+2

Fänge trennen: catch (NotAnInt) {} catch (ParseError) { } –

+0

Mögliches Duplikat von [Java - Throwable to Exception] (https://stackoverflow.com/questions/12359175/java-throwable-to-exception) – Molham

Antwort

13

Wenn Sie nicht die beiden Fälle in getrennten catch Blöcke setzen, verwenden:

if (e instanceof NotAnInt) { 
    ... 
} 

die manchmal gerechtfertigt ist, wie wenn Sie benötigen gemeinsamen Logik für 2 oder mehr verschiedene Ausnahmeklassen.

Andernfalls verwenden getrennte catch Blöcke:

} catch (NotAnInt e) { 
    ... 
} catch (ParseError e) { 
    ... 
} 
5

Verwendung mehrerer catch Blöcke, einer für jede Ausnahme:

try { 
    int x = doSomething(); 
} 
catch (NotAnInt e) { 
    // print something 
} 
catch (ParseError e){ 
    // print something else 
} 
Verwandte Themen