2013-05-05 1 views
4

У меня есть scala case класс. я пытаюсь скопировать его с obj.copy() из Java, но я не вижу никакой такой методscala кейс класс копия способ не видно из 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, так что вы должны указать все параметры. Поэтому метод copy бесполезен в Java.

case class должен быть неизменным, поэтому вам не нужно copy без изменения полей.

Вместо obj2= obj.copy() вы можете использовать obj2= obj.