У меня есть класс «Настройки», в котором настройки моего приложения хранятся в статических переменных (чтобы они были «видны» из любой точки приложения), и я хотел бы иметь возможность сохранять / загружать его.
упрощенный класс «Настройки»:
@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 для соответствия новому созданному объекту "по природе", но, похоже, нет.Есть ли способ добиться такого поведения при сохранении статических переменных?Или я совершенно не прав насчет способа сохранения / загрузки настроек приложения?Пожалуйста, помогите:)