scala复制对象

时间:2011-11-10 20:30:00

标签: scala object copy

有没有办法制作一个对象的副本(甚至更好的对象列表)? 我在谈论可以由其他类扩展的类的自定义对象。

示例:

class Foo() {
   var test = "test"
}

class Bar() extends Foo {
   var dummy = new CustomClass()
}

var b = new Bar()
var bCopy = b.copy() // or something?

1 个答案:

答案 0 :(得分:21)

在Java中,他们试图通过在所有超级类中调用clone来解决这个问题,但这通常被认为是破坏的并且最好避免,原因你可以看一下up(例如here)。

因此,在Scala中,作为Java中的基本实体,您必须为任意类创建自己的复制方法,这将允许您指定诸如深度和浅层复制字段之类的内容。

如果您上课clone,则免费获得case class方法。它实际上比这更好,因为你可以同时更新任何字段:

copy

但是,不推荐从案例类继承。