不可转换的类型;不能施展比较<t>&#39;到&#39;比较器<! - ?超级对象 - >&#39;

时间:2016-08-16 20:39:20

标签: java generics wildcard lower-bound

我在某个库中找到了这段代码:

    public static <T> List<T> sort(
        Collection<T> collection,
        Comparator<T> comparator)
    {
        Object[] a = collection.toArray(new Object[collection.size()]);
        //noinspection unchecked
        Arrays.sort(a, (Comparator<? super Object>) comparator);
        return cast(Arrays.asList(a));
    }

我的检查员发誓

  

不可转换的类型;无法投射java.util.Comparator<T>   &#39; java.util.Comparator<? super java.lang.Object>

在哪种情况下此代码可以正常工作?

1 个答案:

答案 0 :(得分:1)

要回答这个问题,代码无效。

我建议进行以下修改:

public static <T> List<T> sort(Collection<T> collection, Comparator<T> comparator) {
    List<T> a = new ArrayList<T>(collection);
    a.sort(comparator);
    return a;
}

这将一举修复编译错误的可怕性。

免责声明:代码可能无法编译或工作,因为它在我的手机上被翻阅(但它有可能起作用)