scala复制对象
有没有一种方法可以复制一个对象(或者更好的方法是创建一个对象列表)? 我说的是类的自定义对象,它们可以被其他类扩展 例如:scala复制对象,scala,object,copy,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? 在Java中,他们试图用clone方法来解决这个问题,该方法通
class Foo() {
var test = "test"
}
class Bar() extends Foo {
var dummy = new CustomClass()
}
var b = new Bar()
var bCopy = b.copy() // or something?
在Java中,他们试图用
clone
方法来解决这个问题,该方法通过在所有超类中调用clone
来工作,但这通常被认为是不正确的,最好避免,原因是您可以查找(例如)
因此,在Scala中,正如Java中一般一样,您必须为任意类创建自己的复制方法,这将允许您指定字段的深度复制和浅层复制之类的内容
如果你让你的class acase 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)
但是,不推荐从case类继承。请注意,如果保持对象不变,则不需要复制。Java中是否有类似于:Collections.copy(list1,list2)的内容,但对于scala?@user485659如果您专门询问集合,你可以查看文档,看到有很多方法可以解决这类问题<例如,code>ArrayBuffer有一个
clone
方法。但通常情况下,您将使用不可变的列表
,正如Daniel Sobral所指出的,没有理由进行复制。@LuigiPlinge案例类的复制是如何工作的?什么是仅通过引用复制变量,还是执行其他操作?