泛型无法转换错误java

时间:2014-09-02 18:41:27

标签: java generics

List<? extends Number> ls = new ArrayList<Number>(); //(1)
Map <String,List<? extends Number>> mp = new HashMap<String,List<Number>>(); //(2)
Map <String,List<? extends Number>> mp = new HashMap<String,List<? extends Number>>(); //(3)

我可以做(1)和(3)但不做(2)。

如果我能做(1)为什么我在做(2)

时遇到错误

1 个答案:

答案 0 :(得分:1)

即使List<Number>List<? extends Number>HashMap<String, List<Number>>也不是Map<String, List<? extends Number>,因为Java的泛型是不变的。即使Dog扩展Animal,这与a List<Dog> not assignable to a List<Animal>相同。在此处,List<Number>扮演Dog的一部分,List<? extends Number>扮演Animal的角色。

用作类型参数时,

List<Number>无法与List<? extends Number>匹配。

您可以通过引入通配符来获得(2)编译:更改

Map <String,List<? extends Number>> mp = new HashMap<String,List<Number>>();

Map <String, ? extends List<? extends Number>> mp = new HashMap<String,List<Number>>();
相关问题