有沒有一種方法,使一個對象的副本(甚至更好對象的列表)? 我正在討論可能被其他類擴展的類的自定義對象。階副本對象
例如:
class Foo() {
var test = "test"
}
class Bar() extends Foo {
var dummy = new CustomClass()
}
var b = new Bar()
var bCopy = b.copy() // or something?
有沒有一種方法,使一個對象的副本(甚至更好對象的列表)? 我正在討論可能被其他類擴展的類的自定義對象。階副本對象
例如:
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
工作,但是這通常被認爲是破碎的和最好避免,原因你可以查找(例如here)。
於是在Scala中,以Java作爲genereally,你將不得不作出自己的複製方法對任意類,它將允許你喜歡深VS領域的淺拷貝指定的東西。
如果你讓你上課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類繼承但是不推薦使用。
是不是有什麼東西:Collections.copy(list1,list2)在Java中,但然後爲斯卡拉? – user485659
@ user485659如果您要具體詢問關於集合的信息,可以查看文檔,並看到有很多這種方法。例如,'ArrayBuffer'有一個'clone'方法。但通常你會使用不可變的'List',就像Daniel Sobral指出的那樣,沒有理由複製。 –
@LuigiPlinge案例類的副本如何工作?它只是通過引用複製變量,或者做別的事情? –
注意,你並不需要,如果你把你的對象不可改變進行復印。 –