catch 句の中などでの後始末処理で例外が発生した場合は Throwable#addSuppressed を使う

2020/09/01   #java 
このエントリーをはてなブックマークに追加

try-catch や scala.util.Try で、メイン処理で例外が発生し、そのあとリソースのクローズなどの後始末的な処理をする場合、
その後始末処理でも例外が発生する可能性がある。
後始末処理で発生した例外をそのままスローしてしまうと、メイン処理で発生した例外が見えなくなってしまう。
そんなときは、メイン処理で発生した例外に addSuppressed(後始末処理で発生した例外) とする。
するとスタックトレースは、メイン処理で発生した例外のあとに後始末処理で発生した例外が Suppressed: とともに見れる。

参考:
https://se-tomo.com/2020/04/02/%E3%80%90java%E3%80%91catch%E5%8F%A5%E3%81%A7%E4%BE%8B%E5%A4%96%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%80%90addsuppressed%E3%80%91/