Java 当我检查T是否实现可比较时,绕过绑定不匹配编译错误
我正在用Java泛型编码 我目前必须处理通用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
列表的排序问题
给定列表
其中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);