Я пытаюсь написать общий метод, который выполняет итерации записей 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;
}
Я признаюсь, что не являюсь экспертом по дженерикам, поэтому извиняюсь, если это должно быть очевидно.
Вам необходимо объявить общие параметры перед типом возврата:
private <K, V> V forceGet(TreeMap<K, V> sortedMap, K targetKey) { ... }
Map.Entry
должен быть Map.Entry<K,V>
и тогда не будет никакой необходимости , чтобы бросить key
и value
Я думаю, вы должны объявить K и V в своей функции:
private <K,V> V forceGet(...)
{
//your code
}