2014-12-03 19 views
5

Come determinare il tipo di eccezione rilevata, se un'operazione rileva più eccezioni?Java - Come verificare quale tipo di eccezione è stato generato?

Questo esempio dovrebbe rendere più senso:

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

On line 5, come posso controllare quale eccezione è stato catturato?

Ho provato if (e.equals(NotAnInt.class)) {..} ma senza fortuna.

NOTA: NotAnInt e ParseError sono classi nel mio progetto che si estendono Exception.

+2

fanno recidere le catture: cattura (NotAnInt) {} catch (parseError) { } –

+0

Possibile duplicato di [Java - Throwable to Exception] (https://stackoverflow.com/questions/12359175/java-throwable-to-exception) – Molham

risposta

13

Se non è possibile mettere i due casi separati catch blocchi, utilizzare:

if (e instanceof NotAnInt) { 
    ... 
} 

che a volte è giustificata, come quando si ha bisogno di logica condivisa per 2 o più diverse classi di eccezioni.

In caso contrario, utilizzare separati catch blocchi:

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

Usa multipli catch blocchi, uno per ciascuna eccezione:

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