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()以返回set,理论上它应该可用于addAll方法。
答案 0 :(得分:2)
您的方法引入了自己的泛型类型参数,也称为K
和V
,但与类定义的完全不同。
因此,在该方法中,K
和V
指的是与&#34;真实&#34;不同的东西(因此不相容)。类型。
这就像局部变量阴影成员变量一样。由于它们具有相同的名称,因此错误消息变得难以理解。
从方法中删除类型参数声明,应为
public SortedSet<Map.Entry<K, V>> entriesSortedByValues(){
答案 1 :(得分: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>>)
这是因为您正在混合地图和集合。