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)
时遇到错误答案 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>>();