2016-08-13 1 views
0

나는 다양한 플랫폼을위한 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. WebTargetInvocationMultivaluedMap을 허용하기 때문에 직접 MultivaluedMap과 함께

URLConnection에 대한 클래스와 메서드를 추가하기 시작하면 문제가 발생했습니다.

나는 Map<String, List<Object>>을 고수하고 내 mutivalued 유틸리티 메서드를 사용해야한다고 생각합니다.

+1

하지만 왜 이것을 원하니? 맵을 사용하는 것만으로도 충분합니다. 확장 된 것을 전달할 수 있습니다. 왜 MultivaluedMap을 허용하는 다른 메소드를 원하십니까? –

+0

자바 8? 또는 이전? –

+1

다중 유효 거리 맵을 사용하는 경우이 클래스의 특정 메소드를 사용합니까? – fge

답변

2

당신이 MultivaluedMap<K, V>Map<K, List<V>> 그때 당신이 단지 수 확장 말할 경우 :

public abstract class AbstractClass { 

    public void doSome(..., Map<String, List<Object>> params, ...) 
    ... 
} 

그것은 MultivaluedMap와지도를 모두 받아 들일 것입니다.

+0

알아. 그러나 그것을 오버라이드 (구현)하는 방법을 알고 싶습니다. 내 편집을 참조하십시오. –

+0

흠 ... 이것은 실제로 내가 놓친 것입니다 ... 제 생각에는 ... 저는 추가 방법을 정의 할 필요가 없습니다. –

+1

예, 그렇다고 할 필요는 없습니다. 'MultivaluedMap'에서 몇 가지 특정 메소드를 사용하고 싶지 않다면 말입니다. –

관련 문제