次の構造のクラスがあります。
public class RandomMatrixIndex implements IIndex {
private final HashMap<Long, Long> index;
private RandomAccessFile rand;
// constructor and methods.
}
コンストラクターで RandomAccessFile rand が開かれます。別のクラスでは、ハッシュマップを作成しました:
private final HashMap<String, WeakHashMap<String, IIndex>> _MATRIX_MAP;
_MATRIX_MAP.put(....);
マップには、上記のクラスによって実装される IIndex インターフェイスへのマッピングが含まれています。RandomMatrixIndex をマップに配置すると、参照がガベージ コレクションされる可能性があり、RandomAccessFile を適切に閉じることができません。
今私の質問。WeakHashMap への参照が失われた場合、RandomAccessFile を閉じるにはどうすればよいですか? RandomMatrixIndex コンストラクターにファイナライザーを含める必要がありますか? OR はファイルハンドルが自動的に閉じられます。(これがコーディングスタイルが悪い場合はご容赦ください)
どうもありがとう!