当我检查T实现Comparable时绕过绑定不匹配编译错误

时间:2014-07-23 09:57:42

标签: java generics

我正在编写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进行排序。但是,由于我已经检查过,我确信排序 可能

1 个答案:

答案 0 :(得分:0)

List<T>转换为通用List,但警告上升(uncheckedrawtypes)可解决编译问题。

Collections.sort((List)list);