Java泛型:如何在没有原始类型的情况下转换为(T扩展Comparable <?super T>)

我想知道是否有可能将非Comparable转换为某种东西,以便它匹配方法参数T,它具有模板类型< T extends Comparable<? super T>>,与Collections.sort()方法一样

public static <T extends Comparable<? super T>> void sort(List<T> list)

假设我某处有一个非可比较列表的引用,并希望通过像这样的方式调用该方法:

List<E> foo = new List<E>(a);
Collections.sort( /* magic cast */ foo);

如果我转换为(List<?extends Comparable>),我可以这样做,但是这会生成一个警告我正在使用原始类型(在这种情况下没有模板类型的可比较).假设我想避免使用原始类型甚至通过@SuppressWarnings(“rawtypes”)来抑制它们(例如,为了保持向后兼容性和避免原始类型).

是否可以通过强制转换为(List<?extends Comparable< / * something * />>)来避免使用原始类型,那么“某事”(未经检查的强制转换是否可接受)会是什么?

编辑:这个例子只是为了说明这一点.实际上我没有Comparable,也不想对任何东西进行排序,但我只需要动态检查某些东西是否属于某种类型(在本例中为Comparable)(通过instanceof)然后将一些参数传递给一个带有模板参数的方法类似于Collections.sort()方法.

解决方法:

把它投到

Collections.sort((List<Comparable<Object>>) list);

这不会给出“rawtype”警告.只是一个“未经检查的演员”警告(无论如何你会得到它.)

从您在编辑中提到的内容来看,最终您想要做这样的事情吗?

if(!list.isEmpty() && list.get(0) instanceof Comparable){
    List<Comparable<Object>> cmprList = (List<Comparable<Object>>)list;
    Collections.sort(cmprList);
}
上一篇:Android标记:当检测到点击时,onTouch应调用View#performClick


下一篇:Java HotSpot*享内存文件空间不足的影响是什么?