gpt4 book ai didi

JAVA泛型类方法不适用

转载 作者:行者123 更新时间:2023-11-30 03:50:21 25 4
gpt4 key购买 nike

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());

不起作用。为什么?它告诉我该方法不适用于给定的参数,这是一个很难理解的非常模糊的错误陈述。我会异常(exception) this.entrySet() 返回集合,理论上它应该可用于 addAll 方法。

最佳答案

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

因此,在该方法中,KV 引用了与“真实”类型不同(因此不兼容)的内容。

这就像局部变量隐藏成员变量一样。而且由于它们具有相同的名称,因此错误消息变得难以理解。

从方法中删除类型参数声明,应该是

public SortedSet<Map.Entry<K, V>> entriesSortedByValues(){

关于JAVA泛型类方法不适用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24624130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com