Java では、次のようなことをしたいです。
try {
...
} catch (/* code to catch IllegalArgumentException, SecurityException,
IllegalAccessException, and NoSuchFieldException at the same time */) {
someCode();
}
...の代わりに:
try {
...
} catch (IllegalArgumentException e) {
someCode();
} catch (SecurityException e) {
someCode();
} catch (IllegalAccessException e) {
someCode();
} catch (NoSuchFieldException e) {
someCode();
}
これを実行する方法はありますか?
ベストアンサー1
これは可能だったJava 7以降マルチキャッチブロックの構文は次のとおりです。
try {
...
} catch (IllegalArgumentException | SecurityException | IllegalAccessException |
NoSuchFieldException e) {
someCode();
}
ただし、すべての例外が同じクラス階層に属している場合は、その基本例外タイプをキャッチするだけでよいことに注意してください。
また、が から直接的または間接的に継承されている場合、とExceptionA
の両方をExceptionB
同じブロックでキャッチできないことに注意してください。コンパイラは次のようにエラーを出力します。ExceptionB
ExceptionA
Alternatives in a multi-catch statement cannot be related by subclassing
Alternative ExceptionB is a subclass of alternative ExceptionA
この問題を解決するには、例外リストに祖先の例外のみを含めます。これにより、子孫タイプの例外もキャッチされます。