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
的任何实例都是可变的。它基本上是动态大小数组的包装器。它的元素可以修改。
我有一个 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
的任何实例都是可变的。它基本上是动态大小数组的包装器。它的元素可以修改。