将具体地图分配给通用类型地图

Assigning Concrete map to Generic typed Map

我有 TaskVO 作为基础 class。 我有 TaggingTaskVo 扩展 TaskVO

下面是我的两个 Map 声明,第一个版本是使用通用的,第二个版本是专用的。

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 

您需要另一个通配符来执行赋值:

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