可比<! - ? super T - > vs. Comparable <t> </t>

时间:2014-04-27 12:14:16

标签: java wildcard

我看不出这种默认排序方法(来自java.util.Collections)之间的任何区别

public static <T extends Comparable<? super T>> void sort(List<T> list) {
      //implementation
}

..而且:

public static <T extends Comparable<T>> void mySort(List<T> list) {
    //implementation
}

虽然我知道&#39;鞋帮&#39;并且&#39;降低&#39;有限的通配符,我仍然不明白为什么他们使用&#39;?超级T&#39;而不是简单的&#39; T&#39;在这种情况下。如果我使用这些方法,我会得到相同的结果。任何建议?

1 个答案:

答案 0 :(得分:7)

使用您的版本,以下内容将无法编译:

class Base implements Comparable<Base> { ... }

class Derived extends Base { ... }

List<Derived> list = ...;

mySort(list);

Derived 延伸Comparable<Derived>。但是,它确实扩展了Comparable<Base>(因此,Comparable<? super Derived>)。