1 回答

TA貢獻1815條經(jīng)驗 獲得超6個贊
一個List<Map<Integer,Double>>不是一個List<Map<? extends Number,? extends Number>>。
如果是的話,我可以這樣做:
List<Map<Integer,Double>> list = new ArrayList<>();
List<Map<? extends Number,? extends Number>> listX = list; // Doesn't work, pretend it does.
Map<Double,Integer> map = new HashMap<>();
map.put(0.0, 0);
listX.add(map);
for (Map<Integer, Double> e : list) {
Integer i = e.keySet().iterator().next(); // ClassCastException!
}
你會得到一個ClassCastException因為e有一把Double鑰匙,而不是Integer預(yù)期的那樣。
Ideone demo
如果您向通配符列表添加額外的上限:
List<? extends Map<? extends Number,? extends Number>>
^-------^ here
那么你將無法添加map到listX,所以它是安全的。
添加回答
舉報