我正在尝试为实现 MyInterface 的任何类的对象列表实现通用排序实用程序方法。每个 Java API ( http://java.sun.com/javase/6/docs/api/java/util/Collections.html ),Collections.sort() 方法签名是:
public static <T> void sort(List<T> list, Comparator<? super T> c)
我不确定带有通配符参数的列表是否可以替换“普通”参数化列表,但我尝试了:
static void mySort(List<? extends MyInterface> myList, SortCriteria mySortCriteria) {
Collections.sort(myList, new Comparator<? super MyInterface>() {
...
});
}
并得到一个编译时错误,
The type new Comparator(){} cannot extend or implement Comparator<? super MyInterface>
A supertype may not specify any wildcard.
因此,我将其更改为:
static void mySort(List<? extends MyInterface> myList, SortCriteria mySortCriteria) {
Collections.sort(myList, new Comparator<MyInterface>() {
...
});
}
它编译并工作。有什么好的解释吗?