сериализация класса scala, невозможно исправить SerialVersionUID - PullRequest
8 голосов
/ 23 июня 2011

В настоящее время я тестирую удаленных актеров для связи между Android и Windows. Actors remote отправляет разные классы, где я устанавливаю serialVersionUID.

Это код моего сериализованного класса:

@SerialVersionUID(13.asInstanceOf[Long]) case class IdentifyMessage(userName : String, user : User, code : Int)

проблема в том, что отладчик удаленных актеров говорит, что есть проблема с несовместимым классом:

caught java.io.InvalidClassException: scala.actors.remote.Node; local class incompatible: 
stream classdesc serialVersionUID = -6610463074147725500, local class serialVersionUID = -7525549079045563153

Почему мой SerialVersionUID не имеет значения для компилятора?

Как мне исправить serialVersionUID? или может есть другая проблема?

спасибо

1 Ответ

4 голосов
/ 23 июня 2011

Почему-то, используя длинную версию 13, 13л, работает лучше:

@SerialVersionUID(13l) case class IdentifyMessage(userName : String, user : User, code : Int)

Проверено в REPL с:

java.io.ObjectStreamClass.lookup(IdentifyMessage("hei", User(), 8).getClass).getSerialVersionUID()

Обновление

Я также пытался запустить его как программу; как это:

object SerialTest extends App {
  case class User()
  @SerialVersionUID(13.asInstanceOf[Long]) case class IdentifyMessage1(userName: String, user: User, code: Int)
  @SerialVersionUID(13l) case class IdentifyMessage2(userName: String, user: User, code: Int)
  println("#1 " + java.io.ObjectStreamClass.lookup(IdentifyMessage1("hei", User(), 8).getClass).getSerialVersionUID)
  println("#2 " + java.io.ObjectStreamClass.lookup(IdentifyMessage2("hei", User(), 8).getClass).getSerialVersionUID)
}

... и получил:

#1 6829060442504540290
#2 13
...