2

我有这样建模的代码:

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()。我还尝试将 readObject() 粘贴在 B 类中,该类在 A 中调用 initFoo() 函数,但这也不起作用。

网站上的常见问题解答似乎并不意味着任何其他样板文件都是必要的。为什么不被调用?

4

1 回答 1

2

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

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

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

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

于 2013-04-02T13:22:32.183 回答