2013-04-01 15 views
2

我有被建模爲這樣的代碼:XStream的不會調用的readObject()

class A { 
    private transient Foo foo = new Foo(); 
    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { 
     in.defaultReadObject(); 
     foo = new Foo(); 
    } 
} 

class B extends A {} 

我反序列化過程中加入的readObject()A,使得,瞬態foo將被初始化。但是,我在代碼中插入了斷點,可以看到XStream根本不調用readObject()。我也嘗試在類B中使用readObject()方法,它在A中調用initFoo()函數,但這也不起作用。

網站上的FAQ似乎並不意味着任何其他樣板文件對於此工作都是必需的。爲什麼不被稱爲?

+0

我不認爲XStream使用Java的序列化框架 - 我想這些方法只有在使用ObjectOutput/InputStream時纔會使用。 –

+0

XStream確實使用Java序列化規範。 http://xstream.codehaus.org/faq.html#Serialization_initialize_transient – eipark

+0

我站好了。 –

回答

2

看來XStream文檔是不正確的,或者至少是誤導性的。它說在http://x-stream.github.io/faq.html#Serialization_initialize_transient,

在類層次結構中使用後者[readObject],不會爲基類調用readResolve。

但是,我在我的問題中列出的代碼替換readResolve()readObject(),它好像是叫和Foo被正確初始化。這很混亂,因爲根據XStream和java.io.Serializable的文檔,readObject()似乎是我需要的。

但是方法中的斷點仍然沒有被擊中。它可能與這些Serializable方法被調用的方式有關。