【发布时间】:2012-03-11 23:47:33
【问题描述】:
我有“设置”类,它将我的应用程序设置存储在静态变量中(从应用程序的任何位置“可见”),我希望具有保存/加载它的功能。
简化的设置类:
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Settings {
@XmlElement
private static int option = 0;
private Settings() {
}
public static int getOption() {
return option;
}
public static void setOption(int option) {
Settings.option = option;
}
}
用于编组的代码:
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(Settings.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(new Settings(), new File("c:\\test\\test.xml"));
}
并输出xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<settings>
<option>**0**</option>
</settings>
现在的问题:当我通过调用 Settings.setOption(5) 更改 static int option 的值时;如下所示,对之前封送的选项(为 0)进行解组,生成的 Settings 对象的 Settings.option 的值与当前的 Settings.option 相同,即 5。
Settings.setOption(5);
JAXBContext context = JAXBContext.newInstance(Settings.class);
Settings s2 = (Settings)context.createUnmarshaller().unmarshal(new File("c:\\test\\test.xml"));
// Settings.option is 5, but should be 0!
我只是希望在解组后它实际上会将 Setting 的所有静态变量设置为“天生”与新创建的对象匹配,但似乎不是。
有没有办法在保留静态变量的同时实现这种行为?还是我对保存/加载应用程序设置的方法完全错误?请帮忙:)
【问题讨论】:
标签: java xml variables static jaxb