在尝试克隆可变集合时,我最初的方法是在 mutable.Cloneable 特征上使用 clone() 方法。但是,这取决于创建引用副本而不是深层副本的 java.Object.clone 实现。通过测试,我可以确认 mutable.{Queue,Seq,Set} 都是浅拷贝。
我采用了粗略的新 xxx(copy:_*) 方法来创建深层副本,但我的问题是 mutable.Cloneable 特征如果没有实现的目的是什么?
该mutable.Cloneable
特征已在许多集合类上实现。这里有一些例子:
https://github.com/scala/scala/blob/master/src/library/scala/collection/mutable/HashSet.scala#L82
只是clone
没有定义为返回深层副本。这样做的原因是您通常只想复制一个可变集合,以便您可以在不更改原始集合的情况下以某种方式修改它 - 保存在其中的实际元素可能希望保持不变。
如果你想要一个深拷贝,你必须要么使用自定义的深拷贝库,要么自己实现它。