ArrayLists 是可变的吗?

Fin*_*nni 0 java arraylist immutability

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

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

And*_*lko 5

这取决于如何getMoves()实施。

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

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