定义不可变对象的策略
一、原文截图
二以下是翻译
以下规则定义了用于创建不可变对象的简单策略。并非所有记录为“不可变”的类都遵循这些规则。这并不一定意味着这些类的创建者是草率的——他们可能有充分的理由相信他们的类的实例在构建后永远不会改变。但是,此类策略需要复杂的分析,不适合初学者。
1.不要提供“setter”方法,即修改字段或字段引用的对象的方法。
使所有字段最终且私有。
2.不允许子类重写方法。执行此操作的最简单方法是将类声明为 final。更复杂的方法是使构造函数私有并在工厂方法中构造实例。
3如果实例字段包含对可变对象的引用,则不允许更改这些对象:
(1)不要提供修改可变对象的方法。
(2)不要共享对可变对象的引用。从不存储对传递给构造函数的外部可变对象的引用;如有必要,请创建副本,并存储对副本的引用。同样,必要时创建内部可变对象的副本,以避免在方法中返回原始对象。
此截图摘自:
https://docs.oracle.com/javase/tutorial/essential/concurrency/imstrat.html