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