Java XStream赢得';t调用readObject()
我有这样建模的代码:Java XStream赢得';t调用readObject(),java,serialization,deserialization,xstream,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 {} 我将r
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()添加到,以便在反序列化过程中初始化瞬态foo
。但是,我在代码中插入了断点,可以看出XStream根本没有调用readObject()。我还尝试在类B中粘贴readObject(),该类在类A中调用initFoo()函数,但也不起作用
网站上的常见问题似乎并不意味着任何其他样板文件都是这项工作所必需的。为什么不调用它?看来XStream文档不正确,或者至少有误导性。上面写着 在类层次结构中使用后一个[readObject],基类不调用readResolve 但是,在我问题中列出的代码中,将
readObject()
替换为readResolve()
,它似乎被调用了,并且foo被正确初始化。但这令人困惑,因为根据XStream和java.io.Serializable的文档,readObject()似乎正是我所需要的
但是,方法中的断点仍然没有被命中。这可能与调用这些可序列化方法的方式有关。我不认为XStream使用Java的序列化框架-我认为只有在使用
ObjectOutput/InputStream
时才使用这些方法。XStream使用Java序列化规范。