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

时间:2016-08-18 08:46:57

标签: java generics generic-list

我有TaskVO作为基类。 我TaggingTaskVo扩展了TaskVO

下面是我的两个Map声明,第一个版本是使用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 

1 个答案:

答案 0 :(得分:2)

您需要另一张通配符来执行分配:

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