web-dev-qa-db-fra.com

Comment vérifier quel type d'exception a été levé en Java?

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.

14
jean

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) {
    ...
}
27
Erik Allik

Utilisez plusieurs blocs catch, un pour chaque exception:

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

Si plusieurs throws se produisent dans un seul catch(), puis pour reconnaître quelle exception, vous pouvez utiliserinstanceofoperator.

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.
            }
      }
1
anoopknr