从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(如果其他对象引用了基础列表),即使您引用了不可修改的列表,该代码也可以修改列表。

但是,如果要实现真正的不变性,则必须用不变的对象填充列表。

10-04 11:47