gpt4 book ai didi

java - xstream 中向后兼容

转载 作者:太空宇宙 更新时间:2023-11-04 09:00:00 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com