使对象不可变的可能方法

Gau*_*ini 1 java immutability

我正在寻找一种有效的方法来构建一个不可变的类,就像Java的String类一样.

bru*_*nde 8

  1. 所有领域必须是 private优选的final
  2. 确保不能覆盖类 - 使类最终,或使用静态工厂并保持构造函数私有
  3. 必须从构造函数/工厂填充字段
  4. 不要为字段提供任何setter
  5. 留意收藏品.使用 Collections.unmodifiable*.此外,集合应仅包含不可变对象
  6. 所有getter必须提供不可变对象或使用防御性复制
  7. 不提供任何更改Object内部状态的方法.

Tom Hawtin指出final可以是可选的.String class具有hash仅在调用哈希函数时分配的缓存var.