簡體   English   中英

為什么列出 <Map<? extends Number,? extends Number> &gt;不適用於列表 <Map<Integer,Double> &gt;

[英]Why List<Map<? extends Number,? extends Number>> is not working for List<Map<Integer,Double>>

我正在遍歷一個地圖,該地圖的鍵是圖表,值是將在圖表上顯示的數據集。 數據集是地圖列表,因為我在每個圖表上都顯示了多個XYSeries(一個系列-一個具有x和y值的地圖)。 在某些圖表中,x軸/ y軸值為Doubles,在其他圖表中為Integers。 因此,我的數據集的類型為<? 擴展Number>。 我究竟做錯了什么?

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>))。

List<Map<Integer,Double>>不是List<Map<? extends Number,? extends Number>> List<Map<? extends Number,? extends Number>> 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演示

如果在通配符列表中添加額外的上限:

List<? extends Map<? extends Number,? extends Number>>
     ^-------^ here

那么您將無法將map添加到listX ,所以這是安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM