我有一个scala案例类。 我试图用java中的obj.copy()复制它,但我没有看到任何这样的方法
我目前所做的是一种解决方法:
// Hack, copy was not visible from java code.
def doCopy(): MyCaseClass = {
return this.copy()
}
现在可以从java中看到doCopy()。 有没有比这个黑客更好的方法呢?
答案 0 :(得分: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
中没有默认参数,因此您必须指定所有参数。因此,方法copy
在Java
中无用。
case class
应该是不可变的,因此如果不更改字段,则无需copy
。
而不是obj2= obj.copy()
,您可以使用obj2= obj
。