2013-05-05 179 views
4

我有一個scala案例類。 我試圖將它與從Java obj.copy()複製,但我沒有看到任何這樣的方法斯卡拉案例類複製方法是從java代碼中看不到

,我所做的是目前一種變通方法爲:

// Hack, copy was not visible from java code. 
    def doCopy(): MyCaseClass = { 
    return this.copy() 
    } 

現在doCopy()是從java可見。 有沒有比這個黑客更好的方法來做到這一點?

回答

5

沒有方法copy()case class

讓我們來看看在case class生成的所有方法:

$ echo 'case class T(a1: String, a2: Int)' > test.scala 
$ scalac -Xprint:typer test.scala 

你會發現這個方法:

<synthetic> def copy(a1: String = a1, a2: Int = a2): T = new T(a1, a2); 

有在Java沒有默認參數,所以你必須指定所有參數。所以方法copyJava中沒用。

case class應該是不可變的,所以你不需要copy它沒有改變字段。您可以使用obj2= obj而不是obj2= obj.copy()