【问题标题】:Assigning Concrete map to Generic typed Map将具体地图分配给通用类型地图
【发布时间】:2016-08-18 08:46:57
【问题描述】:

我有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 

【问题讨论】:

    标签: java generics generic-list


    【解决方案1】:

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

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

    【讨论】:

    • 有点奇怪,因为我知道它会是 List 那么为什么要为“? extends List”使用通配符
    • 这与嵌套通配符的原理有关,查看本站bayou.io/draft/Capturing_Wildcards.html#Nested_Wildcards“捕获转换仅适用于顶级通配符,不适用于嵌套通配符。”
    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 2014-05-22
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多