2017-01-31 3 views
0
ArrayList<ShipDetail> detailArray = new ArrayList<ShipDetail>(Arrays.asList(shipDetail)); 
Sorter.QuickSort(detailArray); 

Und das ist meine Sortiererklasse, in der ich versuchte, einige Algorithmen zu implementieren.Inferenzvariable T hat inkompatible Grenzen Fehler

public class Sorter 
{ 
    public static<T extends Comparable<T>> void QuickSort(AbstractList<T> collection) 
    { 
     quickSort(collection,0,collection.size()-1); 
    } 

} 

Aber beim Kompilieren ich bin die folgenden Fehler erhalten:

erforderlich: AbstractList gefunden: Arraylist Grund: Inferenz Variable T hat inkompatibel Grenzen Gleichheitsbedingungen: ShipDetail obere Grenzen: Vergleichbare wobei T ist eine Typvariable: T extends Comparable deklariert in Methode QuickSort (AbstractList)

+2

Ist 'ShipDetail' vergleichbar mit sich selbst? Dies ist erforderlich (beachten Sie: > ') – mszymborski

+0

u bedeuten, wenn ich Override haben, mit Methode vergleichen, wenn ja Ja – Anny

+0

Zeigen Sie die Klassendeklaration von' ShipDetail'. – shmosel

Antwort

2

ShipDetail ist nicht vergleichbar mit selbst. Die hier gebunden:

<T extends Comparable<T>>

gilt auch für die Variable vom Typ T in dem Argument, die als ShipDetail geschlossen wird.

class ShipDetail implements Comparable<ShipDetail> { ... 

Und nicht:

class ShipDetail implements Comparator<ShipDetail> { ... 

Comparator s sind Objekte-Algorithmen, die Dienste des Vergleichs anderer Objekte zur Verfügung stellen, während Comparable s Objekte sind selbst die

ShipDetail soll wie folgt definiert werden erlauben, sie mit anderen Arten von Objekten zu vergleichen.

+0

Dank jetzt verstand ich Unterschied der Verwendung von Vergleicher und Vergleichbar. – Anny

+0

@Anny cool! Sie können die Antwort mit dem grünen Häkchen markieren, wenn Sie denken, dass es Ihre Frage vollständig beantwortet. – mszymborski

Verwandte Themen