Почему список> не работает для списка> - PullRequest
0 голосов
/ 29 мая 2019

Я перебираю карту, ключи которой - это диаграммы, а значения - наборы данных, которые будут отображаться на диаграммах. Наборы данных - это списки карт, потому что у меня есть несколько XYSeries, отображаемых на каждой из моих карт (одна серия - одна карта со значениями x и y). В некоторых диаграммах значения осей X / Y представляют собой значения Double, а в других - целые числа. Таким образом, мои наборы данных имеют тип <? расширяет номер>. Что я делаю неправильно?

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 Ответ

3 голосов
/ 29 мая 2019

A 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

Если вы добавите дополнительную верхнюю границу в список с подстановочными знаками:

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

тогда вы бы не смогли добавить map к listX, так что это было бы безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...