【发布时间】:2009-10-08 20:23:42
【问题描述】:
我正在尝试为实现 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)
我不确定带有通配符参数的 List 是否可以替代“普通”参数化 List,但我尝试过:
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>() {
...
});
}
它编译并工作。有什么好的解释吗?
【问题讨论】:
-
当你说“当我尝试它时”,你到底尝试了什么?你能发布一些代码
标签: java generics sorting comparator bounded-wildcard