爲什麼我會在這段代碼上遇到編譯時錯誤?Demystify通配符對我來說
public Interface Location {
.......
}
類代碼...
Map<Type, List<? extends Location>> locationsTypeMap = new HashMap<Type, List<? extends Location>>();
/**
Code to add elements to the hashMap.
*/
newLocation = getNewLocation()
while(mapHasElements){
Location.Type key = location.getType();
List<? extends Location> valueList = (List<? extends Location>)locationsTypeMap.get(key); //1
valueList.add(newLocation);/*Compile error*/
}
在另一方面,如果我更換步驟1中與線下它的工作原理
List<Location> valueList = (List<Location>)locationsTypeMap.get(key);
編譯器應該警告你投是不安全的,(名單)將編譯成(表),這不會拋出類強制轉換如果列表爲,則列表例外,如果您插入對象,則可能導致代碼其他部分出現類別轉換異常 –
josefx
2010-01-08 00:14:07