ディスク フラット ファイル、DB、またはその他の形式の外部リソースなどの IO リソースを利用するクラスがある場合、実行されるオーバーライドされた finalize() メソッドでこれらのストリーム/接続を閉じることの長所と短所は何ですか? GC? これにより、既存の JVM GC を活用して、closeResources() などと呼ばれるクラス メソッドを呼び出すクライアントに依存したり、スパゲッティのような try-catch (ネストされた try-catch と ifs が私の最も嫌いなプログラミング構造)。
具体的な例として、単純なファイル読み取りラッパーがあります。クラスは で構築されString filePath
、ファイルをList<String[]>
. BufferedReader
ファイルを開く際に問題が発生した場合 (catch 句)を閉じるなど、複数の場所で閉じる必要はありませんが、ファイルが正常に読み取られた場合なども閉じます。1 つの場所に配置して、オブジェクトがいつGCを取得しても、常に閉じていることを確認してください。
このアプローチは良い方法ですか、それとも Java の範囲内で高レベルの利便性を自分に与えようとしているのですか?