Простой универсальный метод с TreeMap <K, V> в качестве параметра

1

Я пытаюсь написать общий метод, который выполняет итерации записей TreeMap, чтобы получить значение с его ключом (я использую собственный компаратор для сортировки карты на основе значений и, как результат, нарушил метод get(), но это не проблема, которую я решаю здесь). У меня есть следующее до сих пор, но я не вижу, почему символы "K" и "V" не разрешены, даже если они объявлены в переданной TreeMap.

private V forceGet(TreeMap<K, V> sortedMap, K targetKey) {

    for (Map.Entry e : sortedMap.entrySet()) {
        K key = (K) e.getKey();
        V value = (V) e.getValue();
        if (key.equals(targetKey)) {
            return value;
        }
    }
    return null;
}

Я признаюсь, что не являюсь экспертом по дженерикам, поэтому извиняюсь, если это должно быть очевидно.

  • 3
    Ваш метод не является универсальным. Вот учебник по общим методам
  • 0
Показать ещё 2 комментария
Теги:
generics
treemap
key-value

2 ответа

6
Лучший ответ

Вам необходимо объявить общие параметры перед типом возврата:

private <K, V> V forceGet(TreeMap<K, V> sortedMap, K targetKey) { ... }
  • 1
    Также Map.Entry должен быть Map.Entry<K,V> и тогда не будет никакой необходимости , чтобы бросить key и value
  • 0
    @gtgaxiola: Действительно!
0

Я думаю, вы должны объявить K и V в своей функции:

private <K,V> V forceGet(...)
{
       //your code
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню