나는 다양한 플랫폼을위한 HTTP 클라이언트 라이브러리 작업을 쓰고 있어요. (자바 SE, 자바 EE) 내 자바 SE 구현으로Map <String, List <Object>> 및 MultivaluedMap <String, Object>에 대한 일반적인 방법을 정의하려면 어떻게해야합니까?
, 내 자바 EE 구현으로
public void doSome(..., Map<String, List<Object>> params, ...);
을, 나는
을 나는 그 방법에 대한 일반적인 추상 클래스를 정의하려면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. WebTarget
및 Invocation
이 MultivaluedMap
을 허용하기 때문에 직접 MultivaluedMap
과 함께
URLConnection
에 대한 클래스와 메서드를 추가하기 시작하면 문제가 발생했습니다.
나는 Map<String, List<Object>>
을 고수하고 내 mutivalued
유틸리티 메서드를 사용해야한다고 생각합니다.
하지만 왜 이것을 원하니? 맵을 사용하는 것만으로도 충분합니다. 확장 된 것을 전달할 수 있습니다. 왜 MultivaluedMap을 허용하는 다른 메소드를 원하십니까? –
자바 8? 또는 이전? –
다중 유효 거리 맵을 사용하는 경우이 클래스의 특정 메소드를 사용합니까? – fge