我实际上从这个例子中得到了这个:
static <K,V extends Comparable<? super V>>
List<Entry<K, V>> entriesSortedByValues(Map<K,V> map) {
List<Entry<K,V>> sortedEntries = new ArrayList<Entry<K,V>>(map.entrySet());
Collections.sort(sortedEntries,
new Comparator<Entry<K,V>>() {
@Override
public int compare(Entry<K,V> e1, Entry<K,V> e2) {
return e2.getValue().compareTo(e1.getValue());
}
}
);
return sortedEntries;
}
现在,我已经实现了这个代码,它确实有效。在大多数情况下,我了解发生了什么。我不完全理解的代码的唯一部分是在方法标题内,具体来说:
static <K,V extends Comparable<? super V>>
如果有人能向我解释这部分代码,我将非常感激。特别是为什么我应该在这种背景下使用super。
我对Java相当陌生,所以试图很好地理解使用不同的技术,而不是仅仅将它们放入我的代码中,而不是真正了解它的发生情况。
注意:我会对原始答案发表评论,但如果我的声誉超过50,我只能发表评论。我希望我不会通过这样的发布来破坏任何规则!
答案 0 :(得分:1)
这个想法是V
与至少其他V
相当,但也可以与其他类型相比 - 也就是说,与{{1}的超类型相比}。
答案 1 :(得分:1)
这一行使该方法具有通用性。您可以在类标头或方法声明中使用泛型类型。在这种情况下,方法声明。
static <K,V extends Comparable<? super V>>
声明一个无限制的泛型类型K
。这意味着它可以是Object
类型的任何子类。然后它声明第二个类型V
,它必须实现Comparable
接口。 Comparable
实现也是类型化的,并且该方法添加了一个绑定,声明Comparable类应该能够与泛型类型V
的超类型进行比较。
额外阅读