using
Java の設計者は、独自の try-with-resources 機能を実装する前に、.NET のブロックのクリーンアップ例外処理で発生した問題を確認できたため、それを改善することができました。.NET では、Dispose
ブロックの作成者は、発生した例外を飲み込むか、呼び出し元のプログラムにすべてが正常であると誤って信じ込ませるか、例外Dispose
の証拠をすべて消去するような方法で例外を浸透させるかの不快な選択に直面することがよくあります。以前の例外。幸いなことに、Java はその問題を回避します。
try-with-resources ブロックが正常に成功し、close
も正常に成功した場合、外部コードはすべてを正常と見なします。try
その部分で例外が発生してもclose
正常に成功した場合、外部コードは try-block 例外を参照します。が正常にtry
完了しても例外が発生した場合close
、外部コードでclose
例外が発生します。また、try
スローだけでなくclose
スローも行う場合、外部コードはtry
例外を認識しますが、内部で発生した例外を取得することもできますclose
(複数のネストされた try-with-resources が実行中close
に例外をスローすると、スローされたすべての例外が外部コードで利用可能になります) )。
その結果、.NET の設計では、.NET によってスローされた潜在的に深刻な例外を抑圧することがよくありますがDispose
、Java の設計ではclose
、呼び出し元がすべてが正常であると信じることができないほど、何かが十分にうまくいかない場合は常に例外をスローすることを好みます。