可比<?super T> vs. Comparable <T>

jan*_*777 3 java wildcard

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

public static <T extends Comparable<? super T>> void sort(List<T> list) {
      //implementation
}
Run Code Online (Sandbox Code Playgroud)

..还有这个 :

public static <T extends Comparable<T>> void mySort(List<T> list) {
    //implementation
}
Run Code Online (Sandbox Code Playgroud)

虽然我知道"上"和"下"有界通配符之间的差异,但我仍然不明白为什么他们使用'?在这种情况下,超级T'而不是简单的'T'.如果我使用这些方法,我会得到相同的结果.任何建议?

Oli*_*rth 7

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

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

class Derived extends Base { ... }

List<Derived> list = ...;

mySort(list);
Run Code Online (Sandbox Code Playgroud)

Derived不会延长Comparable<Derived>.但是,它确实延伸Comparable<Base>(因此Comparable<? super Derived>).