0
У меня TaskVO
как базовый класс. У меня есть TaggingTaskVo
, который расширяет TaskVO
Присвоение бетонной карте общей типографской карте
Ниже моя декларация две карты, первый вариант использует Generic и вторая версия специализирована.
Map<String, List<? extends TaskVO>> genericTaskVoMap = new HashMap<String, List<? extends TaskVO>>();
Map<String, List<TaggingTaskVo>> taskVoMap = new HashMap<String, List<TaggingTaskVo>>();
Почему я не могу назначить taskVoMap для genericTaskVoMap?
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
Что-то немного странно, потому что я знаю, что это будет список, то зачем использовать подстановочные знаки для –
Это связано с принцип вложенного шаблона, проверьте этот веб-сайт http://bayou.io/draft/Capturing_Wildcards.html#Nested_Wildcards «Преобразование захвата применяется только к маскам верхнего уровня, а не к вложенным подстановочным знакам». –