当实例变量作为arraylist存在时类的不变性
我有一个不可变的类
假设我有一个类型为ArrayList的成员变量的getter方法。 在那种情况下,当我获得对该变量的引用时,我可以添加或删除它中的元素。 在那种情况下,不变性似乎被侵犯了。
任何人都可以详细解释这个概念吗?
你确实是对的。 违反了不变性。
要使类不可变,您需要确保其所有getter都返回其状态可能发生更改的任何类的安全副本。
您不应该提供ArrayList
类型的变量。 提供Just List
并确保getter执行下一个:
- 返回列表的副本
- 或返回不可修改的列表
或两者。
如果您创建X类型的更改对象的新实例,则X的实例将被视为不可变。 如果考虑ArrayList,则更容易理解。 你有改变这个清单的方法。 每个更改方法都会复制此列表并在新副本上添加/删除/更新并返回。