ArrayList 是可变的吗?

Are ArrayLists mutable?

我有一个 class 包含 Arraylist ArrayList<Move> moves。 我从另一个 class 调用那个 Arraylist 的 getter 并添加一个移动:panel.getMoves().add(move)。但是当我之后遍历 Arraylist 时,出现了一些非常奇怪的错误,提示没有正确添加移动。

我必须打电话给 panel.setMoves(panel.getMoves().add(move)) 吗?如果是,为什么,我一直认为列表是可变的?

这取决于getMoves()的实施方式。

它可以 return 内部 ArrayList 的副本(您必须调用 setMoves(ArrayList) 才能更新它),或者发布对它的直接引用(您不需要不需要 setter)。不过,后者表示封装不良。

class ArrayList 的任何实例都是可变的。它基本上是动态大小数组的包装器。它的元素可以修改。