2016-04-05 109 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