「インスタンスフィールドの遅延初期化のためのダブルチェックイディオム」を検討してください。
// 効果的な Java の項目 71 は、この Bloch へのインタビューからコピーしたものです。 プライベートな揮発性 FieldType フィールド。 FieldType getField() { FieldType 結果 = フィールド。 if (result == null) { // 最初のチェック (ロックなし) 同期(これ){ 結果 = フィールド; if (result == null) // 2 番目のチェック (ロックあり) フィールド = 結果 = computeFieldValue(); } } 結果を返します。 }
フィールドを安全な方法でリセットできるようにしたい (私の場合は、データベースから強制的に再度ロードする)。reset メソッドを使用することでこれを行うことができると思います。
ボイドリセット() { フィールド = null; }
これは、フィールドをリセットする標準的な方法ですか? 安全ですか?落とし穴はありますか?ブロッホがダブルチェック遅延読み込みについて次の警告を出したので、私が尋ねているのです。良い考えではありませんが、ここでは適切です。」
ヒマラヤのプラヤさん、よろしくお願いします。