我有一个“设置”类,它将我的应用程序设置存储在静态变量中(在应用程序的任何地方都“可见”),我希望拥有保存/加载它的功能。
简化的设置类:
@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.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 的所有静态变量以“自然地”匹配新创建的对象,但似乎不是。
有没有办法在保留静态变量的同时实现这种行为?还是我对保存/加载应用程序设置的方法完全错误?请帮助:)
最佳答案
我建议制作两组变量,一组是私有(private)的,另一组是公共(public)静态的。
使用方法将私有(private)变量设置为静态变量。
在我看来,这更容易理解,并且不需要在调用该方法和该类本身之外对代码进行任何更改。
关于java - JAXB 有没有办法解码静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9660091/