Scala嵌套对象序列化

时间:2016-04-05 12:26:19

标签: scala serialization

嗨我有一个案例类A,它包含指向另一个类B的变量(带有伴随对象,其变量指向另一个类C,它也有伴随对象)。 B和C类来自其他图书馆。我可以更简单地序列化我的案例类A?

case class A() {
  val b = B
}

//B & C are defined in a library that I have no control of
object B {
  val c = C
} 

class B{
  ...
}

object C{
  ...
}  

class C{
  ...
}

1 个答案:

答案 0 :(得分:0)

如果这些类已经是Serializable,那么您不需要做任何特殊的事情,所以答案的其余部分假定它们不是。

如果可以从其他字段重建这些字段,请将其标记为@transient并实施readObject(如http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html中所述)以恢复它们。很遗憾,您无法在val中初始化readObject,并且必须编写类似

的内容
case class A() {
  private var _b = B
  def b = _b
}

如果他们不能,您还需要在writeObject中存储他们可以恢复的内容。

最后,您可以使用其中一个第三方序列化库,例如KryoScala Pickling,因为基本上它们都允许添加对您不受控制的类型的支持(否则它们不能使用标准Java库中的类型!)