2017-09-13 10 views
3

Ich bin mir nicht sicher, was vor sich geht. Die Methode funktioniert perectily mit einem Array, aber wenn ich eine Liste verwenden ... gut.Fehler inkompatible Typen: Vergleichbar <T> kann nicht in T konvertiert werden

Ich hoffe wirklich, dass Sie mir helfen können.

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

    } 
} 

dies ist der Fehler:

enter image description here

Antwort

6

List<? extends Comparable<T>> sagt nur, dass die Elemente der Liste mit Instanzen von T verglichen werden, nicht, dass sie Subklassen von T sind. Deshalb erhalten Sie Ihre Fehlermeldung.

Könnten Sie Ihre Implementierung wie folgt ändern:

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

Danke !. Es klappt – Berre

2

der Typen jede dieser zuordnen lassen:

Comparable<T> m = datos.get(menor); 
Comparable<T> mj = datos.get(j); 
if ((m).compareTo(mj) > 0) { //error line 

Die Comparable<T> Schnittstelle erwartet eine T, kein Comparable<T>, als Parameter.

Ihre Unterschrift sollte stattdessen sein:

public static <T extends Comparable<T>> void ordenaSeleccion(List<T> datos) 
Verwandte Themen