Как проверить, какой тип исключения был выдан в 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
.
Ответы
Ответ 1
Если вы можете, всегда используйте отдельные блоки catch
для отдельных типов исключений, в противном случае нет оправдания:
} catch (NotAnInt e) {
// handle NotAnInt
} catch (ParseError e) {
// handle ParseError
}
... если вам не нужно делиться некоторыми общими этапами и не использовать дополнительные методы для краткости:
} catch (NotAnInt | ParseError e) {
// a step or two in common to both cases
if (e instanceof NotAnInt) {
// handle NotAnInt
} else {
// handle ParseError
}
// potentially another step or two in common to both cases
}
однако общие шаги также могут быть извлечены в методы, чтобы избежать блока if
- else
:
} catch (NotAnInt e) {
inCommon1(e);
// handle NotAnInt
inCommon2(e);
} catch (ParseError e) {
inCommon1(e);
// handle ParseError
inCommon2(e);
}
private void inCommon1(e) {
// several steps
// in common to
// both cases
}
private void inCommon2(e) {
// potentially several more
// steps in common
// to both cases
}
Ответ 2
Используйте несколько блоков catch
, по одному для каждого исключения:
try {
int x = doSomething();
}
catch (NotAnInt e) {
// print something
}
catch (ParseError e){
// print something else
}
Ответ 3
Если в одном catch()
происходит несколько throws
, чтобы распознать какое исключение, вы можете использовать оператор instanceof
.
Оператор java instanceof
используется для проверки того, является ли объект экземпляром указанного типа (класс, подкласс или интерфейс).
Попробуйте этот код: -
catch (Exception e) {
if(e instanceof NotAnInt){
// Your Logic.
} else if if(e instanceof ParseError){
//Your Logic.
}
}