从ImmutableList javadocs:
不像
Collections.unmodifiableList(java.util.List),
这是一个单独的视图
仍然可以更改的集合
ImmutableList实例包含其
拥有私人数据,永远不会
更改。 ImmutableList方便
用于公共静态最终列表
(“常量列表”),还可以让您
轻松制作一个“防御性副本”
清单提供给您的班级
呼叫者。
这是否意味着:
如果我有Dimension对象的ImmutableList(例如),那么我无法更改其中的任何Dimension对象?
如果我有Dimension对象的Collections.unmodifiableList(列表),那么我不仅可以添加或删除任何对象,而且可以更改它们(例如,调用setDimension(width,height)方法)?
最佳答案
不可以,不变性仅适用于Collection中对象的数量和引用,而不能解决您放入Collection中的对象的可变性。
与标准JDK Collections.unmodifiableList相比,不可变列表的优点在于,通过使用不可变列表,可以确保所引用的对象,它们的顺序和列表的大小不会从任何来源更改。使用Collections.unmodifiableList(如果其他对象引用了基础列表),即使您引用了不可修改的列表,该代码也可以修改列表。
但是,如果要实现真正的不变性,则必须用不变的对象填充列表。