Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala复制对象_Scala_Object_Copy - Fatal编程技术网

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 a
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)

但是,不推荐从case类继承。

请注意,如果保持对象不变,则不需要复制。Java中是否有类似于:Collections.copy(list1,list2)的内容,但对于scala?@user485659如果您专门询问集合,你可以查看文档,看到有很多方法可以解决这类问题<例如,code>ArrayBuffer有一个
clone
方法。但通常情况下,您将使用不可变的
列表
,正如Daniel Sobral所指出的,没有理由进行复制。@LuigiPlinge案例类的复制是如何工作的?什么是仅通过引用复制变量,还是执行其他操作?