2016-08-18 4 views
0

Ich habe TaskVO als Basisklasse. Ich habe TaggingTaskVo die TaskVOZuordnung von Concrete map zu Generic typed Map

Hier sind meine zwei Map Erklärung, erste Version wird mit Generika und zweite Version ist darauf spezialisiert, erstreckt.

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

Warum kann ich nicht taskVoMap zuweisen genericTaskVoMap?

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

Wenn ich jedoch Typliste zuweisen, wird es sich nicht beschweren.

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

Antwort

2

Sie benötigen eine andere Wildcard die assignement auszuführen: „erweitert List“

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

Etwas wenig seltsam, weil ich weiß, es Liste sein wird dann Wildcard warum verwenden für –

+1

Dies zu tun hat, mit das Prinzip der verschachtelten Platzhalter, überprüfen Sie diese Website http://bayou.io/draft/Capturing_Wildcards.html#Nested_Wildcards "Capture-Konvertierung gilt nur für Wildcards auf der obersten Ebene, nicht auf verschachtelten Platzhalter." –

Verwandte Themen