【问题标题】:Scala Nested Object SerializationScala 嵌套对象序列化
【发布时间】:2016-04-05 12:26:19
【问题描述】:

您好,我有一个案例类 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{
  ...
}

【问题讨论】:

    标签: scala serialization


    【解决方案1】:

    如果这些类已经是Serializable,你不需要做任何特别的事情,所以其余的答案假设它们不是。

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

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

    如果他们不能,您也需要在writeObject 中存储他们可以恢复的东西。

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

    【讨论】:

    • 谢谢。这很有帮助!我之前看过 Scala Pickling,但没有阅读它的代码(它似乎缺少文档和更多示例)。通过对它的深入了解,我进行了测试并且它有效。
    猜你喜欢
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2012-01-28
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多