我正在遍歷一個地圖,其鍵是圖表,值是將顯示在圖表上的數據集。數據集是地圖列表,因為我在每個圖表上顯示了多個 XYSeries(一個系列 - 一張帶有 x 和 y 值的地圖)。在某些圖表中,x 軸/y 軸值是雙精度值,而在其他圖表中是整數。因此,我的數據集類型為 < ? 擴展編號>。我究竟做錯了什么?for (Map.Entry<Chart, List<Map<? extends Number, ? extends Number>>> entry : tcInstance.getMapChartDataset().entrySet()) { switch (entry.getKey().getTitle()) { case something: entry.setValue(listOfMaps1); break; case something else: entry.setValue(listOfMaps2); break; // other case options }}這些是地圖列表的聲明:static List<Map<Integer, Double>> listOfMaps1 = new ArrayList<>();static List<Map<Double, Double>> listOfMaps2 = new ArrayList<>();我希望設置值,但我得到了這些錯誤,這些錯誤表明方法 setValue 不適用于參數 (List>)(對于參數 (List>) 也有同樣的錯誤)。
1 回答
紅糖糍粑
TA貢獻1815條經驗 獲得超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預期的那樣。
Ideone demo
如果您向通配符列表添加額外的上限:
List<? extends Map<? extends Number,? extends Number>>
^-------^ here
那么你將無法添加map到listX,所以它是安全的。
添加回答
舉報
0/150
提交
取消
