1

次の構造のクラスがあります。

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 はファイルハンドルが自動的に閉じられます。(これがコーディングスタイルが悪い場合はご容赦ください)

どうもありがとう!

4

0 に答える 0