1. ホーム
  2. java

[解決済み] 複数のJava例外を同じcatch節でキャッチすることはできますか?

2022-03-20 12:52:51

質問

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();
}

何か方法はないでしょうか?

どのように解決するのですか?

これは可能です Java 7以降 . マルチキャッチブロックの構文は以下の通りです。

try { 
  ...
} catch (IllegalArgumentException | SecurityException | IllegalAccessException |
            NoSuchFieldException e) { 
  someCode();
}

ただし、すべての例外が同じクラス階層に属している場合は、単純にそのベースとなる例外タイプをキャッチすればよいことを覚えておいてください。

また ExceptionAExceptionB が同じブロックにある場合 ExceptionB を直接または間接的に継承しています。 ExceptionA . コンパイラは文句を言うでしょう。

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

この場合、子孫型の例外もキャッチしてしまうので、例外リストには祖先型の例外のみを含めるように修正します。