Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我检查T是否实现可比较时,绕过绑定不匹配编译错误_Java_Generics - Fatal编程技术网

Java 当我检查T是否实现可比较时,绕过绑定不匹配编译错误

Java 当我检查T是否实现可比较时,绕过绑定不匹配编译错误,java,generics,Java,Generics,我正在用Java泛型编码 我目前必须处理通用列表的排序问题 给定列表其中T是任何东西 如果T实现了compariable,则按自然顺序排序 否则,实例化一个适当的比较器 我编写了以下代码 public class MyClass<T> { private Class<T> entityClass; //evaluates to T. Always! protected List<T> orderBy(List<T> list

我正在用Java泛型编码

我目前必须处理通用
列表的排序问题

给定
列表
其中
T
是任何东西

  • 如果
    T
    实现了
    compariable
    ,则按自然顺序排序
  • 否则,实例化一个适当的
    比较器
我编写了以下代码

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;
    }
}
显然,我知道如果
T
本身不是
可比的,我就不能在没有
比较器的情况下对
列表进行排序。但既然我已经检查过了,我确信排序是有可能的

列表
转换为一个通用的
列表
,尽管不断增加的警告(
未选中
原始类型
)解决了编译问题

Collections.sort((List)list);
Collections.sort((List)list);