The King's Museum

ソフトウェアエンジニアのブログ。

【Effective Java】項目65:例外を無視しない

空の catch ブロックを使って例外を無視してはいけません。

// 空の catch ブロック
try {
  ...
} catch (Exception e) {
}

例外を無視するとエラーがあるという事実が隠蔽されてしまいます。 それによって、他の場所で別の形でエラーが再現する可能性もあります。

最低でも例外を無視する意図を書くべきです。 もし、可能であれば例外をログなどに記録するべきです。

例えば FileInputStream をクローズする時、すでにデータの読取りに成功していれば例外は無視してもかまわないでしょう。

FileInputStream stream;
... 読み出し処理 ...
try {
    stream.close();
} catch (Exception e) {
    // データの読み取りは成功しているので例外は無視し、ログだけ記録する
    Log.warn("stream.close() is failed: ", e);
}

このアドバイスはチェックされる例外にもチェックされない例外にもあてはまります。

チェックされる例外の場合は、一般的に回復可能な処理があるはずです。 そのため例外を無視せずに適切な処理を行うべきです。

チェックされない例外は一般的にはプログラミングエラーを示しています。 空の catch ブロックで例外を無視するのではなく、例外を外側に伝播させてシステム全体のエラーとしてしまったほうが適切です。

(c) The King's Museum