Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala案例类复制方法在java代码中不可见_Java_Scala_Scala Java Interop - Fatal编程技术网

scala案例类复制方法在java代码中不可见

scala案例类复制方法在java代码中不可见,java,scala,scala-java-interop,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中可见。 有没有比这更好的方法呢?在case类中没有方法copy() 让我们看看案例类中生成的所有方法: $ ech

我有一个scala案例课程。 我试图用obj.copy()从java复制它,但我没有看到任何这样的方法

我目前所做的是一个变通方法,如:

  // Hack, copy was not visible from java code.
  def doCopy(): MyCaseClass = {
    return this.copy()
  }
现在doCopy()在java中可见。
有没有比这更好的方法呢?

case类中没有方法
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);
def副本(a1:String=a1,a2:Int=a2):T=newt(a1,a2);
Java
中没有默认参数,因此必须指定所有参数。所以方法
copy
Java
中是无用的

case类
应该是不可变的,因此您不需要在不更改字段的情况下复制它

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