次のようなコードのトラブルシューティングで、かなり苦痛なトラブルシューティングの経験がありました。
try {
doSomeStuff()
doMore()
} finally {
doSomeOtherStuff()
}
doSomeStuff() が例外をスローし、それが doSomeOtherStuff() も例外をスローする原因となったため、この問題のトラブルシューティングは困難でした。2 番目の例外 (finally ブロックによってスローされた) がコードにスローされましたが、最初の例外 (doSomeStuff() からスローされた) のハンドルがありませんでした。これが問題の本当の根本原因でした。
コードが代わりにこれを言っていたら、問題はすぐに明らかになったでしょう:
try {
doSomeStuff()
doMore()
} catch (Exception e) {
log.error(e);
} finally {
doSomeOtherStuff()
}
だから、私の質問はこれです:
catch ブロックなしで使用される finally ブロックは、よく知られている Java アンチパターンですか? (これは確かに、明らかによく知られているアンチパターン「例外をゴブリングしないでください!」の、あまり目立たないサブクラスのようです)。