当实例变量作为arraylist存在时类的不变性

我有一个不可变的类

假设我有一个类型为ArrayList的成员变量的getter方法。 在那种情况下,当我获得对该变量的引用时,我可以添加或删除它中的元素。 在那种情况下,不变性似乎被侵犯了。

任何人都可以详细解释这个概念吗?

你确实是对的。 违反了不变性。

要使类不可变,您需要确保其所有getter都返回其状态可能发生更改的任何类的安全副本。

您不应该提供ArrayList类型的变量。 提供Just List并确保getter执行下一个:

  1. 返回列表的副本
  2. 或返回不可修改的列表

或两者。

如果您创建X类型的更改对象的新实例,则X的实例将被视为不可变。 如果考虑ArrayList,则更容易理解。 你有改变这个清单的方法。 每个更改方法都会复制此列表并在新副本上添加/删除/更新并返回。