我有一個類,我希望使用JAXB從XML文件中填充內容。我的XML文件看起來與此類似:解組JAXB中的TreeSet
<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?
我在寫作時部分回答了我自己的問題:由於我需要保留自己的自然排序,所以它應該首先是SortedSet。我改變了這一點,解組正在正常工作。我仍然希望聽到關於我的設置的任何想法,特別是我更願意指定JAXB正在選擇的實現,而不是依靠魔法...... – seanhodges