同じ catch 句で複数の Java 例外をキャッチできますか? 質問する

同じ catch 句で複数の Java 例外をキャッチできますか? 質問する

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同じブロックでキャッチできないことに注意してください。コンパイラは次のようにエラーを出力します。ExceptionBExceptionA

Alternatives in a multi-catch statement cannot be related by subclassing
  Alternative ExceptionB is a subclass of alternative ExceptionA

この問題を解決するには、例外リストに祖先の例外のみを含めます。これにより、子孫タイプの例外もキャッチされます。

おすすめ記事