我有一个类,我希望使用 JAXB 从 XML 文件中填充内容。我的 XML 文件与此类似:
<root>
<mylist>
<item id="1">First Item</item>
<item id="2">Second Item</item>
</mylist>
</root>
我的 JAXB 注释类如下所示:
@XmlRootElement
class MyParentClass {
// I always populate this with a TreeSet
private Set<MyFieldItem> items;
public void setItems(Set<MyFieldItem> items) {
this.items = items;
}
@XmlElementWrapper("mylist") @XmlElement("item")
public Set<MyFieldItem> getItems() {
return items;
}
}
class MyFieldItem implements Comparable<MyFieldItem> {
private Integer id;
private String value;
public void setId(Integer id) {
this.id = id;
}
@XmlAttribute
public Integer getId() {
return id;
}
public void setValue(String value) {
this.value = value;
}
@XmlValue
public String getValue() {
return value;
}
public int compareTo(MyfieldItem o) {
return this.id.compareTo(o.getId());
}
}
我发现这种安排将我的对象正确地序列化为 XML,但是当我尝试将其转换回TreeSet时,我使用的变成了HashSet。
从理论上讲,我的集合可以固定到 TreeSet(它确实解决了问题),但我宁愿正确配置 JAXB 并将该逻辑推迟到其他地方。我如何告诉 JAXB 改为构建 TreeSet?