2016-04-05 108 views
0

嗨我有一个案例类A包含变量指向另一个类B(与伴侣对象,它的变量指向另一个类C也有伴侣对象)。 B类和C类来自其他图书馆。什么是我可以序列化我的案例类A的更简单的方法?Scala嵌套的对象序列化

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{ 
    ... 
} 

回答

0

如果这些类已经Serializable,你不需要做任何特殊,所以答案的其余部分假定他们不是。

如果这些字段可以从其他字段重建,请将它们标记为@transient并执行readObject(如http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html中所述)以恢复它们。不幸的是,你不能在readObject初始化val S和将不得不写类似

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

如果他们不能,你需要存储的东西,他们可以writeObject恢复为好。

最后,你可以像使用KryoScala Pickling第三方序列化的图书馆之一,因为基本上所有的人都允许不在您的控制下,增加对类型的支持(否则他们无法与标准的Java类型的工作库!)

+0

谢谢。这非常有帮助!我之前查看过Scala Pickling,但没有阅读它的代码(它似乎缺少文档和更多示例)。再深入研究一下,我测试了一下,并发挥了作用。 – Hebo