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.
Ваш метод вводит свои собственные параметры типового типа, также называемые K
и V
, но полностью отличные от тех, которые определены классом.
В результате в рамках метода K
и V
ссылаются на нечто отличное от (следовательно, несовместимое с) "реальных" типов.
Это похоже на локальные переменные, затеняющие переменные-члены. И поскольку они имеют одно и то же имя, сообщение об ошибке становится трудно понять.
Удалить объявление параметра типа из метода, должно быть
public SortedSet<Map.Entry<K, V>> entriesSortedByValues(){
Comparable
должно быть перенесено в параметры типа класса, или где-то должно быть введено приведение с участием Comparable
.
Прочтите сообщение об ошибке. Он говорит, что 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>>)
Это связано с тем, что вы смешиваете карты и наборы.