Comment puis-je déterminer quel type d'exception a été intercepté, si une opération intercepte plusieurs exceptions?
Cet exemple devrait avoir plus de sens:
try {
int x = doSomething();
} catch (NotAnInt | ParseError e) {
if (/* thrown error is NotAnInt */) { // line 5
// printSomething
} else {
// print something else
}
}
Sur la ligne 5, comment puis-je vérifier quelle exception a été capturée?
J'ai essayé if (e.equals(NotAnInt.class)) {..}
mais pas de chance.
REMARQUE: NotAnInt
et ParseError
sont des classes de mon projet qui étendent Exception
.
Si vous ne pouvez pas mettre les deux cas dans des blocs catch
distincts, utilisez:
if (e instanceof NotAnInt) {
...
}
ce qui est parfois justifié, comme lorsque vous avez besoin d'une logique partagée pour 2 classes d'exceptions ou plus.
Sinon, utilisez des blocs catch
séparés:
} catch (NotAnInt e) {
...
} catch (ParseError e) {
...
}
Utilisez plusieurs blocs catch
, un pour chaque exception:
try {
int x = doSomething();
}
catch (NotAnInt e) {
// print something
}
catch (ParseError e){
// print something else
}
Si plusieurs throws
se produisent dans un seul catch()
, puis pour reconnaître quelle exception, vous pouvez utiliserinstanceof
operator.
L'opérateur Java instanceof
permet de vérifier si l'objetest une instancedu type spécifié (classe ou sous-classe ou interface).
Essayez ce code: -
catch (Exception e) {
if(e instanceof NotAnInt){
// Your Logic.
} else if if(e instanceof ParseError){
//Your Logic.
}
}