Метод:Метод вызова не соответствует сигнатуру метода, даже если метод использует более общие типы
public static void incrementMapCounter(Map<Object,Number> tabulationMap, Object key) {
Number value = 0;
if (tabulationMap.containsKey(key)) {
value = tabulationMap.get(key);
}
value = value.doubleValue() + new Double(1);
tabulationMap.put(key, value);
}
вызов метода:
Map<String,Long> counts = new HashMap<>();
String key = "foo-bar";
incrementMapCounter(counts, key);
Ошибка (переформатировать):
The method
incrementMapCounter(Map<Object,Number>, Object)
in ... is not applicable
for the arguments (Map<String,Long>, String)
Подпись метода является либо совпадающим, либо более общим:
- Карта является Карта
- Строка является объектом (x2)
- Long является номер
Я немного запутался на этом.
Как бы вы заявили об этом, если используете bo й аргумент, карту и ключ? Я пробовал пару способов, void incrementMapCounter (Карта ,? Extends Number> map, Object key) // void incrementMapCounter (Карта ,? Extends Number> map, Extends Object>)) // void incrementMapCounter (Карта карта, клавиша K). В помеченном «дубликате» вопросе, в последнем абзаце ответа @ Yishai http://stackoverflow.com/a/2745357/295802, похоже, это невозможно: «единственный способ сделать то же самое время должно иметь определенный тип " –
Hah! Извините, пропустил второй аргумент. Используйте общий метод для этого. Я уточню свой ответ. – markspace