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

时间:2012-01-25 16:15:37

标签: java immutability

我有一个不可变的类

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

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

3 个答案:

答案 0 :(得分:3)

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

  1. 返回列表的副本
  2. 或返回不可修改的列表
  3. 或两者兼而有之。

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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