まず、よく使われているトピックについて質問して申し訳ありません。たくさんの質問に出くわし、finallyブロックでリソースを閉じるメソッドからの潜在的な例外を飲み込む(キャッチして無視/ログに記録する)ことを提案する回答があります。一般的に受け入れられているパターンのようです。しかし、私はまだ誰もその理由を説明するのを見ていません。ほんの一例です:Try-catch-finallyそしてもう一度trycatch。
finallyブロックからスローされた例外は、対応するtryブロックでスローされた例外を「マスク」することを理解していますが、これがなぜ悪いことなのかわかりません。例えば:
Resource r = new Resource();
try {
r.use();
other();
} finally {
r.close();
}
私の現在の理解は次のとおりです。
- 例外をスローするだけの場合
close
は、絶対に飲み込みたくありません。 - 両方とも例外
use
をclose
スローする場合、それはおそらく同じ根本的な理由であり、どちらの例外が伝播されるかは問題ではありません(どちらにも同じように役立つ情報が含まれていますか?)。 - 両方とも例外
other
をスローする場合、2つの無関係な問題があります。close
おそらく最初に発生したものが伝播するはずですが、最初の例外が2番目の例外を引き起こしたことを示唆する理由はありません(ありますか?)。
私は何が間違っていますか?