En Java, je veux faire quelque chose comme ça:
try {
...
} catch (/* code to catch IllegalArgumentException, SecurityException,
IllegalAccessException, and NoSuchFieldException at the same time */) {
someCode();
}
...au lieu de:
try {
...
} catch (IllegalArgumentException e) {
someCode();
} catch (SecurityException e) {
someCode();
} catch (IllegalAccessException e) {
someCode();
} catch (NoSuchFieldException e) {
someCode();
}
Y a-t-il un moyen de faire ça?
java
exception
try-catch
multi-catch
froadie
la source
la source
bitwise or
(|
)? Pourquoi ne pas utiliser une virgule ou l'opérateur qui a une signification plus similaire, lelogical or
(||
)?Pas exactement avant Java 7 mais je ferais quelque chose comme ça:
Java 6 et versions antérieures
Java 7
la source
exc.getCause()
. En parallèle, Robert C. Martin (entre autres) recommande d'utiliser des exceptions non contrôlées (le compilateur n'a aucune idée du type d'exception qui sera levé à partir de là); reportez-vous au Chapitre 7: Gestion des erreurs sur son livre Clean code .throw exc
au lieu dethrow new RuntimeException(exc)
?Dans Java 7, vous pouvez définir plusieurs clauses catch comme:
la source
S'il existe une hiérarchie d'exceptions, vous pouvez utiliser la classe de base pour intercepter toutes les sous-classes d'exceptions. Dans le cas dégénéré, vous pouvez intercepter toutes les exceptions Java avec:
Dans un cas plus courant, si RepositoryException est la classe de base et PathNotFoundException est une classe dérivée, alors:
Le code ci-dessus intercepte RepositoryException et PathNotFoundException pour un type de gestion des exceptions et toutes les autres exceptions sont regroupées. Depuis Java 7, selon la réponse de @ OscarRyz ci-dessus:
la source
Non, un par client.
Vous pouvez intercepter une superclasse, comme java.lang.Exception, tant que vous effectuez la même action dans tous les cas.
Mais ce n'est peut-être pas la meilleure pratique. Vous ne devez intercepter une exception que si vous avez une stratégie pour la gérer réellement - et que la journalisation et la reprise ne sont pas des «manipulations». Si vous n'avez pas d'action corrective, mieux vaut l'ajouter à la signature de la méthode et la laisser bouillonner jusqu'à quelqu'un qui peut gérer la situation.
la source
Une alternative plus propre (mais moins verbeuse, et peut-être pas aussi préférée) à la réponse de user454322 sur Java 6 (c'est-à-dire Android) serait d'attraper tous les
Exception
s et de relancer lesRuntimeException
s. Cela ne fonctionnerait pas si vous envisagez d'attraper d'autres types d'exceptions plus haut dans la pile (sauf si vous les relancez également), mais interceptera efficacement toutes les exceptions vérifiées .Par exemple:
Cela étant dit, pour la verbosité, il pourrait être préférable de définir un booléen ou une autre variable et en fonction de cela, exécuter du code après le bloc try-catch.
la source
En pré-7, que diriez-vous:
la source
caught
dans unfinally
bloc?Oui. Voici la façon d'utiliser le séparateur de tuyaux (|),
la source
Pour kotlin, ce n'est pas possible pour l'instant mais ils ont envisagé de l'ajouter: Source
Mais pour l'instant, juste un petit truc:
la source
Attrapez l'exception qui se trouve être une classe parente dans la hiérarchie des exceptions. C'est bien sûr une mauvaise pratique . Dans votre cas, l'exception parent commune se trouve être la classe Exception, et intercepter toute exception qui est une instance d'Exception est en effet une mauvaise pratique - les exceptions comme NullPointerException sont généralement des erreurs de programmation et doivent généralement être résolues en vérifiant les valeurs nulles.
la source