gpt4 book ai didi

javafx - JAXB marshall 属性

转载 作者:行者123 更新时间:2023-12-03 21:42:12 25 4
gpt4 key购买 nike

使用 JAXB,我不知道如何编码 Properties .特别是,我试图编码 SimpleObjectProperty但我认为它也不适用于其他属性。在其他一些类中,我能够管理 getter/setter,但在 HashMap 的这种情况下,这不起作用。的 SimpleObjectProperties
这是我的代码片段:

..
@XmlRootElement(name = "derby")
@XmlAccessorType(XmlAccessType.FIELD)
public class Derby extends Observable {
@XmlElement(name = "cars")
private final ArrayList<Car> cars;
@XmlTransient
private final ObservableList<Car> carsObservable;
@XmlElement(name = "schedule")
private final SimpleObjectProperty<Schedule> scheduleProperty;
@XmlElement(name = "settings")
private final HashMap<String, SimpleObjectProperty> settings;//This is not marshalling correctly
..

这是输出 XML 片段:
...
<settings>
<entry>
<key>track.lanecount</key>
<value/> //No value???
</entry>
<entry>
<key>general.cardisplay</key>
<value/>
</entry>
<entry>
<key>track.orientation</key>
<value/>
</entry>
<entry>
<key>general.derbytitle</key>
<value/>
</entry>
</settings>
...

我正在创建变量而不是让它们未初始化。我还测试了这些设置在编码之前是否确实具有值,并且确实如此。

我使用的原因 Properties而不仅仅是我试图存储的真实对象是因为我想将监听器添加到我的设置中,因此当单个设置发生更改时,所有依赖于它的东西都会自动更新。

最佳答案

我看到你正在使用 @XmlAccessorType(XmlAccessType.FIELD) 这意味着类字段用于编码/解码值...

你可以把它改成 @XmlAccessorType(XmlAccessType.PROPERTY) 然后把所有 @XmlElement 到属性的 setter/getter 上。

更多信息请参见文档:XmlAccessType

你的代码啜饮然后看起来像这样:

..
@XmlRootElement(name = "derby")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Derby extends Observable {

private final ArrayList<Car> cars;

private final ObservableList<Car> carsObservable;

private final SimpleObjectProperty<Schedule> scheduleProperty;

private final HashMap<String, SimpleObjectProperty> settings;//This is not marshalling correctly

@XmlElement(name = "cars")
public List<Car> getCars() {
return cars;
}

public void setCars(final ArrayList<Car> cars) {
this.cars.clear();
this.cars.addAll(cars);
}

@XmlElement(name = "schedule")
public Schedule getSchedule() {
return this.scheduleProperty.get();
}

public void setSchedule(final Schedule schedule) {
this.scheduleProperty.set();
}

@XmlElement(name = "settings")
public Map<String, Object> getSettings() {
// do your mapping logic here...
// convert your HashMap<String, SimpleObjectProperty> to Map<String, Object>
}

public void setSettings(final Map<String, Object> settings) {
// do your mapping logic here...
// convert your Map<String, Object> to HashMap<String, SimpleObjectProperty>
}

@XmlTransient
public ObservableList<Car> getCarsObservable() {
return carsObservable;
}
..

关于javafx - JAXB marshall 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29723767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com