首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以编写泛型XmlAdapter吗

可以编写泛型XmlAdapter吗
EN

Stack Overflow用户
提问于 2010-12-03 02:04:04
回答 1查看 4.6K关注 0票数 7

我知道,我可以使用原始类型来编写XMLAdapter,但是我可以使用泛型类型吗?我试着阅读接口( link ),但没有注意到这方面的线索。

例如map:

我想使用类似这样的东西:

代码语言:javascript
复制
@XmlJavaTypeAdapter(GenericMapAdapter<String, Double>.class)//
private final HashMap<String, Double> depWageSum = //
new HashMap<String, Double>();

要获得

代码语言:javascript
复制
<depWageSum>
    <entry key="RI">289.001</entry>
    <entry key="VT">499.817</entry>
    <entry key="HI">41.824</entry>
    ...
<depWageSum>

而类本身可能看起来像这样:

代码语言:javascript
复制
@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)));}};
}   }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-03 22:12:36

您将无法按照所述方式执行此操作。类型参数将不会被类保留。但是,您可以引入一些简单的子类,它们可以利用GenericMapAdapter中的逻辑:

代码语言:javascript
复制
public class StringDoubleMapAdapter extends GenericMapAdapter<String, Double> {
}

然后在属性上使用适配器子类:

代码语言:javascript
复制
@XmlJavaTypeAdapter(StringDoubleMapAdapter.class)//
private final HashMap<String, Double> depWageSum = //
new HashMap<String, Double>();

有关XmlAdapter的更多信息,请参阅:

  • http://bdoughan.blogspot.com/2010/07/xmladapter-jaxbs-secret-weapon.html
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4338237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档