我有这段代码:
@ElementList(name="package", required=false, inline=true)
private Hashtable<String, PackageListItem> packages;
这给了我这个错误:
D / debug(22150):java.util.Hashtable无法强制转换为java.util.Collection
我尝试使用getter解决这个问题:
@ElementList(name="package", required=false, inline=true)
private Collection<PackageListItem> getPackageXML() {
return packages.values();
}
但这给了我一个我不太明白的错误:
D / debug(22307):默认构造函数不能接受只读@ org.simpleframework.xml.ElementList(data = false,empty = true,entry =,inline = true,name = package,required = false,type在com.example.MyClass类
中的方法'packageXML'上= void)
我知道我可以使用ElementMap
,但这会在我的XML中提供太多信息。
如何在Simple 2.7.1中序列化Hashtable
的值?
答案 0 :(得分:0)
或者,您可以使用HashMap而不是Hashtable。它们几乎相同,所以它很有可能适合你。以下是不同之处: Differences between HashMap and Hashtable?
以下是使用simpleXML的地图的示例: http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#map
<强>更新强>
好吧,Hashtable实现了Map接口,因此它应该与@ElementMap注释一起使用。 (你现在使用@ElementList。)
答案 1 :(得分:0)
尝试类似的东西:
private Hashtable<String, PackageListItem> packages;
@ElementList
private List<PackageListItem> list;
public PropertyMap() {
this.packages = new Hashtable<String, PackageListItem>();
}
@Validate
public void validate() {
List<String> keys = new ArrayList<String>();
for(PackageListItem entry : list) {
String key = entry.getKey();
if(keys.contains(key)) {
throw new PersistenceException("Duplicate key %s", key);
}
keys.put(key);
}
}
@Commit
public void build() {
for(PackageListItem entry : list) {
packages.put(entry.getKey(), entry);
}
}