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>() {
...
});
}
そして、コンパイルして動作します。良い説明はありますか?