错误:不兼容的类型:无法将Comparable<T>转换为T。

4

我不确定发生了什么。

使用数组时该方法能够完美运行,但是如果使用列表,情况就不一样了。

我真的希望你能帮助我。

public static <T> void ordenaSeleccion(List<? extends Comparable<T>> datos)
{
    Object aux;
    int menor;

    for (int i = 0; i < datos.size(); i++) {
        menor = i;

        for (int j = i + 1; j < datos.size(); j++) {
            if (datos.get(menor).compareTo(datos.get(j)) > 0) { //error line
                menor = j;
            }
        }

        if (menor != i) {
            aux = datos.get(i);
            datos.set(i, datos.get(menor));
            datos.set(menor, aux);
        }

    }
}

这是错误信息:

在此输入图片描述

2个回答

7

List<? extends Comparable<T>>表示列表的元素可以与T的实例进行比较,而不是它们是T子类。这就是你收到错误消息的原因。

你能按照以下方式更改你的实现吗:

public static <T extends Comparable<T>> void ordenaSeleccion(List<T> datos)
{
    T aux;
    int menor;

    for (int i = 0; i < datos.size(); i++) {
        menor = i;

        for (int j = i + 1; j < datos.size(); j++) {
            if (datos.get(menor).compareTo(datos.get(j)) > 0) { //error line
                menor = j;
            }
        }

        if (menor != i) {
            aux = datos.get(i);
            datos.set(i, datos.get(menor));
            datos.set(menor, aux);
        }
    }
}

3

让我们为它们中的每一个分配类型:

Comparable<T> m = datos.get(menor);
Comparable<T> mj = datos.get(j);
if ((m).compareTo(mj) > 0) { //error line
Comparable<T>接口需要一个T而不是Comparable<T>作为它的参数。您的签名应该是:
public static <T extends Comparable<T>> void ordenaSeleccion(List<T> datos)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接