考虑“实例字段延迟初始化的双重检查习惯用法”:
// Effective Java 中的第 71 条复制自这次对 Bloch 的采访。 私有易失性 FieldType 字段; 字段类型 getField() { 字段类型结果 = 字段; if (result == null) { // 第一次检查(无锁定) 同步(这个){ 结果=字段; if (result == null) // 第二次检查(带锁) 字段 = 结果 = 计算字段值(); } } 返回结果; }
我希望能够以安全的方式重置该字段(在我的情况下,强制它从数据库中再次加载)。我假设我们可以通过使用重置方法来做到这一点:
无效重置(){ 字段=空; }
这是重置字段的标准方法吗?安全吗?有什么陷阱吗?我之所以问,是因为 Bloch 就双重检查延迟加载给出了以下警告:“这个习语非常快,但也很复杂和微妙,所以不要试图以任何方式修改它。只需复制和粘贴——通常不是一个好主意,但在这里很合适。”
提前感谢来自喜马拉雅山的普拉亚。