2016-07-30 25 views
2

Ich habe diese einfache Knoten:Wie verwende ich compareTo mit einem Knoten?

public class Node<T> implements Comparable<Node>{ 
    T value; 
    Node<T> next; 
    public Node(T value){ 
     this.value = value; 
     this.next = null; 
    } 
    public int compareTo(Node other){ 
     return this.value.compareTo(other.value); 
    } 
} 

Die Sonnenfinsternis wird immer smart und fragt mich „this.value“ zu werfen. Casting mit int funktioniert nicht. Wie sollte es gemacht werden?

+0

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

+0

Nein, ich habe es gerade ausprobiert und funktioniert auch nicht. –

+0

aber danke, dass du versucht hast zu helfen. –

Antwort

4

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 ..

+0

Vielen Dank, es funktioniert perfekt. –