嗨我有一个案例类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{
...
}
答案 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
中存储他们可以恢复的内容。
最后,您可以使用其中一个第三方序列化库,例如Kryo或Scala Pickling,因为基本上它们都允许添加对您不受控制的类型的支持(否则它们不能使用标准Java库中的类型!)