0

我在源代码中重命名了一个枚举常量。

public enum MyEnum { FOO, BAR }

public enum MyEnum { FOO, BAZ }

现在,如果我尝试读回以前用 xstream 序列化的旧数据,我会得到一个ConversionException: "No enum constant MyEnum BAR".

我尝试了别名:

xstream.aliasField("BAR", MyEnum.class, "BAZ");

但这并没有帮助。

知道如何用新代码读取这个旧的 xstream 序列化文件吗?

4

1 回答 1

1

不能给枚举常量起别名。

转换器可以在几行内完成工作

公共类 MyEnumConverter 实现 Converter {

...

public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
    context.convertAnother(source, reflectionConverter);
}

public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
    String s = reader.getValue();
    if (s.equals("BAR")) {
        return MyEnum.BAZ;
    } else {
        return MyEnum.valueOf(s);
    }
}

public boolean canConvert(Class type) {
    return type == MyEnum.class;
}

}

于 2013-01-24T15:16:49.643 回答