2014-09-02 89 views
0
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)。仿製藥不能轉換錯誤java

如果我能做到(1)做(2)

+0

如果您使用的是Java 7+你可以做'新的HashMap <>( );' – BitNinja 2014-09-02 18:45:03

回答

1

即使一個List<Number>List<? extends Number>,一個HashMap<String, List<Number>>不是Map<String, List<? extends Number>時,由於Java的泛型是不變的,爲什麼我得到一個錯誤。這與a List<Dog> not assignable to a List<Animal>相同,即使Dog延伸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>>();