0
我有TaskVO
作为基类。 我有TaggingTaskVo
它延伸TaskVO
指定具体地图到通用类型地图
下面是我的两个地图声明,第一个版本是使用通用和第二个版本是专门的。
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“捕获转换仅适用于顶级通配符,不适用于嵌套通配符。” –