4

我有一个 scala 案例类。我正在尝试使用 java 中的 obj.copy() 复制它,但我没有看到任何这样的方法

我目前所做的是一种解决方法:

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

现在 doCopy() 在 java 中是可见的。有没有比这个 hack 更好的方法呢?

4

1 回答 1

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.copy()你可以使用obj2= obj.

于 2013-05-05T17:13:42.213 回答