java - JAXB 有没有办法解码静态变量?

标签 java xml variables static 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>

现在的问题是:当我通过调用 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/

相关文章:

java - 如何创建一个点击即可运行的Java应用程序?

xml - Delphi 的 oBix (xml) 客户端

sql - 在 SQL 中构造 FROM

c - gcc:C 中未声明的变量,但已声明

python - 在 Python 中重用名称以节省内存

Java:为什么我的 Equals 方法不起作用?

java - 填充 JTree

android - 值等于dimens.xml 中的match_parent 和fill_parent?

java - 如何在 android studio 中的给定 XML 布局文件中使用 Java 动态添加按钮?

java - 使用多个输出参数调用 Oracle StoredProcedure