2017-09-13 319 views
3

我不确定发生了什么事情。 该方法与数组一起使用pereclty,但如果我使用列表...以及。错误不兼容类型:可比较<T>无法转换为T

我真的希望你能帮助我。

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

    } 
} 

这是错误:

enter image description here

回答

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

谢谢!有用 – Berre

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) 
相关问题