ソートしたいオブジェクトのリストがありますが、リストのジェネリック型がに準拠している場合に限りjava.util.Comparable
ます。正しいキャストが何であるかはわかりませんが:
private <T extends Widget> void doAction(Class<T> clazz, List<T> list) {
if (Comparable.class.isAssignableFrom(clazz)) {
Collections.sort(list);
}
// Do more.
}
Collections.sort
実装するにはtypeパラメーターが必要なjava.util.Comparable
ので、すべてが機能しない次のことを試しました。
Collections.sort((List<? extends Comparable<T>>)list);
Collections.sort((List<? extends Comparable>)list);
Collections.sort((List<? extends Comparable<? super T>>)list);
Collections.sort((List<T extends Comparable<? super T>>)list);
そして他に、私は本当に推測していました。私は最初のものがうまくいっただろうと思った。
どんな援助も大歓迎です。
更新:これがどのように機能しないかを示すために、コンパイラから次のエラーが発生します。
com/mycompany/test/WidgetTest.java:[112,20] no suitable method found for sort(java.util.List<T>)
method java.util.Collections.<T>sort(java.util.List<T>,java.util.Comparator<? super T>) is not applicable
(cannot instantiate from arguments because actual and formal argument lists differ in length)
method java.util.Collections.<T>sort(java.util.List<T>) is not applicable
(inferred type does not conform to declared bound(s)
inferred: T
bound(s): java.lang.Comparable<? super T>)
Widget
これは、意図されたものに準拠していませんComparable
が、のサブクラスが準拠している可能性があることに注意してください。Widget
これは、私がテストしようとしているものです。