我正在编写Java泛型。
我目前必须处理通用List
的排序。
给定List<T>
其中T
是什么
T
实施Comparable
,则按自然顺序排序Comparator<T>
我写了以下代码
public class MyClass<T> {
private Class<T> entityClass; //evaluates to T. Always!
protected List<T> orderBy(List<T> list, Collection<ItemSorting> order)
{
if (order == null)
if (!Comparable.class.isAssignableFrom(entityClass))
throw new RuntimeException("Entity " + entityClass.getSimpleName() + " not sortable");
else
Collections.sort(list);
else
{
Comparator<T> comparator = ...; //my Reflection-based comparator
Collections.sort(list, comparator);
}
return list;
}
}
编译问题在于Collections.sort(list);
。错误是:
Bound mismatch: The generic method sort(List<T>) of type Collections is not applicable for the arguments (List<T>). The inferred type T is not a valid substitute for the bounded parameter <T extends Comparable<? super T>>
显然,如果List
本身不是Comparator
,我知道如果没有T
我无法对Comparable
进行排序。但是,由于我已经检查过,我确信排序 可能
答案 0 :(得分:0)
将List<T>
转换为通用List
,但警告上升(unchecked
和rawtypes
)可解决编译问题。
Collections.sort((List)list);