我写了各种平台的HTTP客户端库的工作。(Java SE的,Java EE的)如何为Map <String,List <Object>>和MultivaluedMap <String,Object>定义一个通用方法?
随着我的Java SE实现,我做
public void doSome(..., Map<String, List<Object>> params, ...);
随着我的Java EE实现,我做
public void doSome(..., MultivaluedMap<String, Object> params, ...);
如果我想定义那些方法的通用抽象类,我怎么可以同时为Map<String, List<Object>>
和MultivaluedMap<String, Object>
的方法?有没有简单的方法可以做到这一点T
?
请注意,Multivalued<K, V>
延伸Map<K, List<V>>
。
我目前只能这样做。
public abstract class AbstractClient {
public void doSome(..., Map<String, List<Object>> params, ...);
}
public class JavaEEClient extends AbstractClient {
static <K, V> MultivaluedMap<K, V> multivalued(Map<K, List<V>> map) {
if (map == null) {
return null;
}
if (map instanceof MultivaluedMap) {
return (MultivaluedMap<K, V>) map;
}
final MultivaluedMap<K, V> multi = new MultivaluedHashMap<>(map.size());
multi.putAll(map);
return multi;
}
public void doSome(..., MultivaluedMap<String, Object> params, ...) {
}
@Override
public void doSome(..., Map<String, List<Object>> params, ...) {
doSome(..., multivalued(params), ...);
}
}
UPDATE
我真的不得不承认,我想念领导自己。实际上,我开始只使用JAX-RS方法,并开始为URLConnection
添加Java SE的方法。
这是O.K.直接MultivaluedMap
,因为WebTarget
s和Invocation
s接受MultivaluedMap
。
当我开始为URLConnection
s添加类和方法时,问题就出现了。
我想我必须坚持Map<String, List<Object>>
并使用我的mutivalued
实用方法。
但为什么你想要这个?只使用map就足够了,可以传递任何扩展它的东西,为什么你想要另一种接受多值图的方法呢? –
Java 8?或之前? –
如果你有一个多值映射,你会使用这个类的具体方法吗? – fge