2013-05-05 45 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()