java - 从 Java 代码中看不到 Scala 案例类复制方法

标签 java scala scala-java-interop

我有一个 Scala 案例类。 我正在尝试使用 obj.copy() 从 Java 复制它,但我没有看到任何此类方法

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

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

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

最佳答案

案例类中没有方法copy()

让我们看看案例类中生成的所有方法:

$ 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 应该是不可变的,因此您无需在不更改字段的情况下复制它。

您可以使用 obj2= obj 而不是 obj2= obj.copy()

关于java - 从 Java 代码中看不到 Scala 案例类复制方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16386886/

相关文章:

java - equals 方法在 Java 中是如何工作的

scala - 为什么类型参数绑定(bind)的方法 > : allow subtypes?

java - Scala:如何实现包含没有类型参数的 scala "typed"类的 java 接口(interface)

scala - 如何向 Java 提供 Scala 伴随对象的类?

javascript - Spark 2.0.0 - JSON 格式错误的输出

Java <-> Scala 互操作 : transparent List and Map conversion

java - 如何防止对 Checkstyles 使用已弃用的方法

java - Struts 2 动态参数绑定(bind)

java - 使用 apache commons 从 html 表单中解析列表框值

eclipse - Project Lombok 是否与 Scala 配合良好?