2014-12-03 4 views
5

Как определить, какой тип исключения был пойман, если операция улавливает несколько исключений?Java - Как проверить, какой тип исключения был брошен?

Этот пример должен иметь больше смысла:

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

В строке 5, как я могу проверить, какие исключения был пойман?

Я пробовал if (e.equals(NotAnInt.class)) {..}, но не повезло.

ПРИМЕЧАНИЕ: NotAnInt и ParseError - это классы в моем проекте, которые расширяются Exception.

+2

делает разъединить улов: улова (NotAnInt) {} улов (ParseError) { } –

+0

Возможный дубликат [Java - Throwable to Exception] (https://stackoverflow.com/questions/12359175/java-throwable-to-exception) – Molham

ответ

13

Если вы не можете поместить два случая в отдельных catch блоков, используйте:

if (e instanceof NotAnInt) { 
    ... 
} 

который иногда оправдано, например, когда вам нужно совместно логику для 2-х или более различных классов исключений.

В противном случае, использует отдельные catch блоков:

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

использовать несколько catch блоки, по одному для каждого исключения:

try { 
    int x = doSomething(); 
} 
catch (NotAnInt e) { 
    // print something 
} 
catch (ParseError e){ 
    // print something else 
} 
Смежные вопросы