2016-08-18 2 views
0

기본 클래스는 TaskVO입니다. TaskVO구체 맵을 일반 유형 맵에 지정

다음은 내 두 맵 선언, 첫 번째 버전은 일반 및 두 번째 버전은 특수화 된 것입니다.

Map<String, List<? extends TaskVO>> genericTaskVoMap = new HashMap<String, List<? extends TaskVO>>(); 
Map<String, List<TaggingTaskVo>> taskVoMap = new HashMap<String, List<TaggingTaskVo>>(); 

genericTaskVoMap에 taskVoMap을 할당 할 수없는 이유는 무엇입니까?

genericTaskVoMap = taskVoMap;  //Type mismatch: cannot convert from Map<String,List<TaggingTaskVo>> to Map<String,List<? extends TaskVO>> 

그러나 유형 목록을 서로 할당 할 때 불평하지 않습니다.

List<? extends TaskVO> genericTaskVoList = new ArrayList<>(); 
List<TaskVO> taskVoList = new ArrayList<TaskVO>(); 
genericTaskVoList = taskVoList; //No compilation error 

답변

2

당신은 assignement 수행하는 또 다른 와일드 카드가 필요합니다 : "목록이 확장"나는 이유에 대해 와일드 카드를 사용하여 다음 목록이 될 것 알고 있기 때문에

Map<String, ? extends List<? extends TaskVO>> genericTaskVoMap = new HashMap<String, ? extends List<? extends TaskVO>>(); 
+0

뭔가 조금 이상한이 함께 할 수있다 –

+1

가 중첩 된 와일드 카드의 원칙은이 웹 사이트를 확인하십시오. http://bayou.io/draft/Capturing_Wildcards.html#Nested_Wildcards "캡처 변환은 중첩 된 와일드 카드가 아닌 최상위 와일드 카드에만 적용됩니다." –