为了账号安全,请及时绑定邮箱和手机立即绑定

为什么列表<地图<?扩展数字,?extends Number>>

为什么列表<地图<?扩展数字,?extends Number>>

郎朗坤 2022-12-21 13:13:23
我正在遍历一个地图,其键是图表,值是将显示在图表上的数据集。数据集是地图列表,因为我在每个图表上显示了多个 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,所以它是安全的。


查看完整回答
反对 回复 2022-12-21
  • 1 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号