XStream不会调用readObject()

时间:2013-04-01 22:20:41

标签: java serialization deserialization xstream

我的代码是这样建模的:

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()函数,但这也不起作用。

网站上的常见问题解答似乎并不意味着任何其他样板是必要的。为什么没有被召唤?

1 个答案:

答案 0 :(得分:2)

似乎XStream文档不正确,或者至少具有误导性。它在http://x-stream.github.io/faq.html#Serialization_initialize_transient中说,

  

在类层次结构中使用后者[readObject],不为基类调用readResolve。

但是,在我的问题中列出的代码中用readObject()替换readResolve(),它似乎被调用,foo正在被正确初始化。这很令人困惑,因为根据XStream和java.io.Serializable的文档,readObject()似乎是我需要的。

然而,方法内部的断点仍未被击中。它可能与调用这些Serializable方法的方式有关。