繁体   English   中英

错误不兼容类型:可比较 <T> 无法转换为T.

[英]error incompatible types: Comparable<T> cannot be converted to T

我不确定发生了什么。 该方法使用数组运行pereclty,但如果我使用列表......那么。

我真的希望你能帮助我。

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

    }
}

这是错误:

在此输入图像描述

List<? extends Comparable<T>> 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);
        }
    }
}

让我们为每个类型分配类型:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM