我使用Simple XML library连载一组元素:指定集合类型SimpleXML中的注释
@Root(name = "items")
public class Items {
@ElementList(required = false, inline = true, entry = "item")
private Set<Item> items;
public Set<Item> getItems() {
return items;
}
public void setItems(final Set<Item> items) {
this.items = items;
}
}
我需要收集是一个Set
,但同时也需要进行排序 - 此原因,当序列化时,我使用LinkedHashSet
作为items
的实际类型。
Set<Item> items = new LinkedHashSet<Item>();
items.add(...);
items.add(...);
items.add(...);
Items root = new Items();
root.setItems(items);
new Persister().write(root, stringWriter);
这个工程只是罚款,所得XML包含在正确的顺序Item
元素。
问题与反序列化 - 简单XML看到该类型是Set
,挑选在CollectionFactory.getConversion()
的实现:一个HashSet
,不保留元素的顺序。
一个解决它的办法是改变Items
定义:
@ElementList(required = false, inline = true, entry = "item")
private LinkedHashSet<Item> items;
public void setItems(final LinkedHashSet<Item> items) {
this.items = items;
}
这工作,但它确实对良好的编码习惯。 有没有办法告诉Simple XML使用LinkedHashSet
?
不错的问题,+1。 – ollo