java – 可以编写泛型XmlAdapter
发布时间:2020-05-25 16:51:28 所属栏目:Java 来源:互联网
导读:我知道,我可以使用Raw类型来编写 XMLAdapter,但我可以使用泛型类型.我尝试阅读API( link),但甚至没有注意到这一点的线索. 例如地图: 我想用,比如: @XmlJavaTypeAdapter(GenericMapAdapterString, Double.class)//private final HashMapString, Double depWa
|
我知道,我可以使用Raw类型来编写 XMLAdapter,但我可以使用泛型类型.我尝试阅读API( link),但甚至没有注意到这一点的线索. 例如地图: 我想用,比如: @XmlJavaTypeAdapter(GenericMapAdapter<String,Double>.class)// private final HashMap<String,Double> depWageSum = // new HashMap<String,Double>(); 要得到 <depWageSum>
<entry key="RI">289.001</entry>
<entry key="VT">499.817</entry>
<entry key="HI">41.824</entry>
...
<depWageSum>
类本身可能看起来像以下几行: @SuppressWarnings("serial") public class GenericMapAdapter<K,V> extends XmlAdapter<GenericMapAdapter.MapType<K,V>,Map<K,V>> {
public static class MapType<K,V> {
@XmlValue protected final List<MapTypeEntry<K,V>> entry = new ArrayList<MapTypeEntry<K,V>>();
public static class MapTypeEntry<K,V> {
@XmlAttribute protected K key;
@XmlValue protected V value;
private MapTypeEntry() {};
public static <K,V> MapTypeEntry<K,V> of(final K k,final V v) {
return new MapTypeEntry<K,V>() {{this.key = k; this.value = v;}};
} } }
@Override public Map<K,V> unmarshal(final GenericMapAdapter.MapType<K,V> v) throws Exception {
return new HashMap<K,V>() {{ for (GenericMapAdapter.MapType.MapTypeEntry<K,V> myEntryType : v.entry)
this.put(myEntryType.key,myEntryType.value);}};
}
@Override public MapType<K,V> marshal(final Map<K,V> v) throws Exception {
return new GenericMapAdapter.MapType<K,V>() {{for (K key : v.keySet())
this.entry.add(MapTypeEntry.of(key,v.get(key)));}};
} }
解决方法您将无法按照描述执行此操作.类不会保留类型参数.但是,您可以引入一些可以利用GenericMapAdapter中的逻辑的简单子类:public class StringDoubleMapAdapter extends GenericMapAdapter<String,Double> {
}
然后在属性上使用适配器子类: @XmlJavaTypeAdapter(StringDoubleMapAdapter.class)// private final HashMap<String,Double>(); 有关XmlAdapter的更多信息,请参阅: > http://bdoughan.blogspot.com/2010/07/xmladapter-jaxbs-secret-weapon.html (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
