2
以下是一直困擾我的代碼示例。與地圖不兼容的類型錯誤
如果我嘗試創建一個有界類型的集合並將另一個變量指定爲另一個無界未知類型的集合的變量,則代碼將工作。
List<? extends Number> numberList = new ArrayList<>();
List<?> anotherList = numberList; // OK
如果我嘗試在Map中做同樣的事情,我會得到「不兼容的類型」錯誤。
Map<String, List<? extends Number>> numberMap = new HashMap<>();
Map<String, List<?>> anotherMap = numberMap; // ERROR
錯誤說:
Map<String,List<? extends Number>> cannot be converted to Map<String,List<?>>
是不是Map<String,List<? extends Number>>
一種類型的Map<String,List<?>>
?
這裏是全班爲了您的方便https://ideone.com/AZgV9H
我試圖理解爲什麼這是行不通的,我應該怎麼改變它,以使其發揮作用。
泛型是**不**協變。就像「列表」不是「列表」,「地圖>」不是「地圖」。 –
[是列表列表的子類?爲什麼不是Java的泛型隱含多態?](http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicitly-p) –
Pshemo