JAVA泛型类方法不适用

时间:2014-07-08 05:12:49

标签: java generics hashmap

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方法。

2 个答案:

答案 0 :(得分:2)

您的方法引入了自己的泛型类型参数,也称为KV,但与类定义的完全不同。

因此,在该方法中,KV指的是与&#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>>)

这是因为您正在混合地图和集合。