我寫了各種平臺的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