java - 不可转换的类型;无法将 'Comparator<T>' 转换为 'Comparator<? super Object>'

标签 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));
    }

我的检查员发誓

Inconvertible types; cannot cast java.util.Comparator<T> to 'java.util.Comparator<? super java.lang.Object>

这段代码在什么情况下可以工作?

最佳答案

回答这个问题,代码无法运行。

我建议进行以下修改:

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

这将一次性解决编译错误和可怕的问题。

免责声明:代码可能无法编译或无法工作,因为它是在我的手机上插入的(但有合理的机会它会工作)

关于java - 不可转换的类型;无法将 'Comparator<T>' 转换为 'Comparator<? super Object>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38984071/

相关文章:

java - struts2 在操作类中获取值(value)

json - 在 TableView 中显示 JSON

python - 混合正则表达式和 shell 通配符

Java 通配符混淆示例

regex - Golang 匹配域名通配符

java - 使用数组时的数学表达式 (Java)

java - Java 中无法读取 double

Java-如何剥离字符串中的单个字符并将它们存储在一维数组中?

Java:摆脱复制粘贴静态方法的使用

typescript - 在 TypeScript 中使用不同泛型的列表而不丢失原始类型信息