我有一个我希望排序的对象列表,但前提是列表的泛型类型符合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
需要类型参数来实现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
可能符合的子类是我要测试的。