2014-12-03 17 views
5

Jak ustalić, który typ wyjątku został przechwycony, czy operacja przechwytuje wiele wyjątków?Java - Jak sprawdzić, który typ wyjątku został zgłoszony?

Ten przykład powinien więcej sensu:

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

W linii 5, w jaki sposób mogę sprawdzić, który został złapany wyjątek?

Próbowałem if (e.equals(NotAnInt.class)) {..} ale bez powodzenia.

UWAGA: NotAnInt i ParseError to klasy w moim projekcie, które rozszerzają Exception.

+2

tworzą zerwania połowy: chwytające (NotAnInt) {} chwytające (ParseError) { } –

+0

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

Odpowiedz

13

Jeśli nie można umieścić dwa przypadki w oddzielnych blokach catch, należy:

if (e instanceof NotAnInt) { 
    ... 
} 

który jest czasem uzasadnione, jak wtedy, gdy trzeba podzielił logikę na 2 lub więcej różnych klas wyjątków.

inaczej, stosować oddzielne catch bloki:

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

Zastosowanie wielu catch bloki, po jednym dla każdego z wyjątkiem:

try { 
    int x = doSomething(); 
} 
catch (NotAnInt e) { 
    // print something 
} 
catch (ParseError e){ 
    // print something else 
} 
Powiązane problemy