JAVA универсальный метод класса не применим

1
public class IdfMap<K, V> extends HashMap<K, V>{

    public IdfMap() {
        super();
    }

    public IdfMap(int initialCapacity){
        super(initialCapacity);
    }

    public IdfMap(int initialCapacity, float loadFactor){
        super(initialCapacity, loadFactor);
    }

    public <K, V extends Comparable<? super V>> SortedSet<Map.Entry<K, V>> entriesSortedByValues(){
        SortedSet<Map.Entry<K, V>> sortedEntries = new TreeSet<>(
                new Comparator<Map.Entry<K, V>>() {
                    @Override
                    public int compare(Map.Entry<K, V> e1, Map.Entry<K, V> e2){
                        return e2.getValue().compareTo(e1.getValue());
                    }
                }
                );
        sortedEntries.addAll(this.entrySet());                      
        return sortedEntries; 
    }
}

Линия

sortedEntries.addAll(this.entrySet());

не работает. Зачем? Он сообщает мне, что этот метод не применим для данного аргумента, который является довольно неопределенным выражением ошибки для понимания. Я хотел бы исключить this.entrySet(), чтобы вернуть набор, что теоретически можно использовать для метода addAll.

  • 3
    Почему у вашего метода есть свои параметры типа?
  • 0
    Ява нуб, спасибо за помощь!
Теги:
generics
hashmap

2 ответа

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

Ваш метод вводит свои собственные параметры типового типа, также называемые K и V, но полностью отличные от тех, которые определены классом.

В результате в рамках метода K и V ссылаются на нечто отличное от (следовательно, несовместимое с) "реальных" типов.

Это похоже на локальные переменные, затеняющие переменные-члены. И поскольку они имеют одно и то же имя, сообщение об ошибке становится трудно понять.

Удалить объявление параметра типа из метода, должно быть

public SortedSet<Map.Entry<K, V>> entriesSortedByValues(){
  • 1
    Кроме того, требование Comparable должно быть перенесено в параметры типа класса, или где-то должно быть введено приведение с участием Comparable .
0

Прочтите сообщение об ошибке. Он говорит, что The method addAll(Collection<? extends Map.Entry<K,V>>) in the type Set<Map.Entry<K,V>> is not applicable for the arguments (Set<Map.Entry<K,V>>)

Это связано с тем, что вы смешиваете карты и наборы.

  • 0
    Нет, это не проблема.

Ещё вопросы

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