我不确定发生了什么。 该方法使用数组运行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);
}
}
}
这是错误:
答案 0 :(得分:6)
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);
}
}
}
答案 1 :(得分:2)
让我们为每一个分配类型:
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)