scala复制对象

use*_*659 14 scala copy object

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

例:

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

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

var b = new Bar()
var bCopy = b.copy() // or something?
Run Code Online (Sandbox Code Playgroud)

Lui*_*hys 21

在Java中,他们尝试clone通过clone在所有超类中调用来解决这个问题,但这通常被认为是破坏的并且最好避免,原因是你可以查找(例如这里).

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

如果你让你上课case class,你可以copy免费获得一个方法.它实际上比那更好,因为你可以同时更新任何字段:

case class A(n: Int)
val a = A(1)         // a: A = A(1)
val b = a.copy(a.n)  // b: A = A(1) 
val c = a.copy(2)    // c: A = A(2)
Run Code Online (Sandbox Code Playgroud)

但是,不推荐继承自case类.