我想知道是否有可能将一个非Comparable类型转换成某个类型,以使其与方法参数T相匹配,而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>)
,我可以做到这一点,但是这会生成一个警告,即我使用了原始类型(在这种情况下没有模板类型的Comparable)。假设我想避免使用原始类型,甚至通过@SuppressWarnings("rawtypes")
来抑制它们(例如保留向后兼容性并避免使用原始类型)。是否可能通过将其转换为
(List<? extends Comparable</*something*/>>)
来避免使用原始类型,那么“something”是什么(未经检查的转换是可以接受的)?编辑:此示例只是为了说明这一点。实际上,我没有可比较的对象,也不想排序任何东西,但我只需要动态检查某些东西是否为某种类型(在本例中为Comparable)(通过instanceof),然后将某些参数传递给具有类似于
Collections.sort()
方法的模板参数的方法。
E
没有实现Comparable
,那么尝试将这些对象列表传递给Collections.sort
的意义在哪里?你肯定只会在运行时得到一个类转换异常吧? - Péter Török