定义不可变类的规则

以下规则定义了用于创建不可变对象的简单策略。

  1. 不要提供 setter 方法 - 修改字段引用的字段或对象的方法。
  2. 使所有字段成为最终和私有。
  3. 不允许子类重写方法。最简单的方法是将类声明为 final。更复杂的方法是使构造函数私有并在工厂方法中构造实例。
  4. 如果实例字段包含对可变对象的引用,则不允许更改这些对象:
  5. 不要提供修改可变对象的方法。
  6. 不要共享对可变对象的引用。永远不要存储对传递给构造函数的外部可变对象的引用; 如有必要,创建副本并存储对副本的引用。同样,必要时创建内部可变对象的副本,以避免在方法中返回原始对象。