我正在使用 xstream 的一小部分来执行序列化。
我有以下类(class):
// version 0
class A {
}
// version 1
class A {
Object o = new Object();
}
为了让我读取版本 0 xml 文件来构造版本 1 类 A,我必须在版本 1 类 A 中添加以下方法:
class A {
private Object readResolve()
{
/* For backward compatible */
if (o == null) { o = new Object(); }
}
Object o = new Object();
}
到目前为止效果很好。
现在,情况正在逆转。
我有以下类(class):
// version 0
class A {
Object o = new Object();
}
// version 1
class A {
}
我怎样才能读取xml文件版本0,来构造类A版本1?
如果您尝试这样做,您将遇到以下异常:
run:
com.thoughtworks.xstream.converters.ConversionException: a : a
---- Debugging information ----
message : a : a
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : a : a
class : javaapplication15.Main$A
required-type : javaapplication15.Main$A
path : /javaapplication15.Main$A/a
line number : 2
-------------------------------
null
BUILD SUCCESSFUL (total time: 2 seconds)
最佳答案
目前,我使用以下策略进行向后兼容:
// version 0
class A {
Object o = new Object();
}
// version 1
class A {
// This will ensure o will not be be read, or be written into file.
// transient keyword which prevent read, will only work well for xstream 1.3.1
transient Object o = new Object();
}
// version 2. Slowly phase out Object o, after class A had been deployed for quite sometime.
class A {
}
关于java - xstream 中向后兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/989228/