我有类'设置',它将应用程序的设置存储在静态变量中(从应用程序中的任何位置“可见”),我希望具有保存/加载它的功能。JAXB有没有解组静态变量的方法?
简化设置类:
@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>
现在的问题:当我改变的值静态int选项通过调用Settings.setOption(5);如下所示,并做解组先前编组选项(其为0),将得到的设置对象的具有值的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的所有静态变量设置为与“自然”新创建的对象相匹配,但似乎没有。
有什么办法在保留静态变量的同时实现这种行为?或者我完全错误的方法做保存/加载的应用程序设置?请帮助:)
玩弄后,我做了SettingsHolder.Setting例如_Public静态final_,从_static对其进行初始化{} block_从文件。如果文件不存在,它将创建新的设置实例,这是默认设置。 – Miroslav 2012-03-12 13:34:11