2016-04-05 21 views
0

Merhaba Başka bir B sınıfını işaret eden değişkenler içeren bir A sınıfı var. (Eşlik eden nesneye sahip olan ve tamamlayıcı nesneye sahip olan başka bir C sınıfını işaret eden değişkenlere sahip olan). B ve C sınıfı diğer kütüphanelerden. A sınıfı sınıfımı serileştirmenin daha kolay yolu nedir? Bu sınıflar zaten Serializable iseScala Yuvalanmış Nesne Serileştirme

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

cevap

0

, özel bir şey yapmanıza gerek yok, bu yüzden cevabın kalan onlar değil varsayar.

bu alanlar diğerlerinden yeniden inşa edilmesi durumunda, @transient olarak işaretleyin ve bunları geri (http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html anlatıldığı gibi) readObject uygular. Ne yazık ki, readObject içinde val s başlatmak edemez ve onlar, onlar yanı writeObject yılında restore edilebilir bir şey saklamak için gereken yapamıyorsanız

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

gibi bir şey yazmak zorunda kalacaktır. temelde hepsi değil sizin kontrolünüz altında türleri için destek eklemek için izin çünkü

Son olarak,, Kryo veya Scala Pickling gibi üçüncü taraf seri hale kütüphaneleri birini kullanabilirsiniz (aksi takdirde standart Java türleriyle işlemesi mümkün değil kitaplık!)

+0

Teşekkürler. Bu oldukça yararlı! Daha önce Scala Pickling'e baktım ama onun kodunu okumamıştım (doküman ve eksik örneklerden yoksun gibi görünüyor). Daha derin bir bakışla, test ettim ve işe yaradı. – Hebo

İlgili konular