Ihre Deklaration von T wird nicht "erweitert" Vergleichbar, Sie können es also nicht zum Vergleich verwenden.
Sie könnten es ändern:
public class Node<T extends Comparable<T>> implements Comparable<Node<T>>{
T value;
Node<T> next;
public Node(T value){
this.value = value;
this.next = null;
}
public int compareTo(Node<T> other){
return this.value.compareTo(other.value);
}
}
Dies setzt voraus, dass T Vergleichbare implementiert. Wenn T nicht wirklich vergleichbar ist, können Sie den Vergleich nur auf Knotenebene durchführen. Aber Sie sollten wahrscheinlich erklären noch Ihre Klasse wie dieses
public class Node<T extends Something>
so, dass Sie Methoden von Something
mit zu arbeiten, wenn der Vergleich zu tun.
Wenn ich am Anfang zurück: Wenn Sie Ihre Knoten instanziiert, tun Sie etwas wie folgt aus:
Node<MyType> node = new Node<MyType>();
MyType wird Ihr T. Ist MyType ein vergleichbar? Wenn ja, können Sie Ihre Klasse wie oben gezeigt deklarieren. Andernfalls können Sie T.compareTo (aka MyType.compareTo) nicht ausführen. Daher müssen Sie Ihren Vergleich mit anderen Feldern aus MyType durchführen.
Ich hoffe, das ist klar genug ..
Sie definieren 'compareTo' für Typ' T', innerhalb dessen Sie den Aufruf 'compareTo' auf' this.value' die wieder 'T' wird eingeben. Sehen Sie es so: Bevor Sie 'compareTo' für einen Typ definieren, wie können Sie' compareTo' für diesen Typ aufrufen? – SomeDude
Nein, ich habe es gerade ausprobiert und funktioniert auch nicht. –
aber danke, dass du versucht hast zu helfen. –