2017-09-13 15 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) 
関連する問題