Methoden Wie compareTo() Methode implementieren?

Terry12

Aktives Mitglied
hi,
Ich hab eine Klasse Node , ich will jetzt einen String übergeben und dann in meiner Klasse Tree den Node.keyValue mit dem String vergleichen , keyValue ist ebenfalls ein String-Wert aus der Klasse Node.

Wie muss ich das machen , also wie implementiere ich Comparable und wie muss ich die Methode überschreiben damit es klappt? thx schonmal...
 
Was willst du vergleichen? Nodes oder Strings?

Wenn du zwei Nodes vergleichen willst könnte das so aussehen:
Java:
public int compareTo(Node otherNode) {
  return this.keyValue.compareTo(otherNode.keyValue);
}
 
hm
Java:
    public int compareTo(Node current)
    {
       return this.keyWert.compareTo(current.keyWert);    
    }
er sagt mir cannot find symbol - method compareTo(java.lang.object) ????
 
Du musst
Code:
Comparable<Node>
implementieren.

EDIT:
Code:
Node current
ist eigentlich nicht ganz richtig. Es wird ein "anderer" Node übergeben, den du mit dem aktuellen Vergleichst.
 
Code:
Comparable#compareTo
soll eigentlich zwei Werte gleichen Typs vergleichen. String.compareTo(Node) oder Node.compareTo(String) ist nicht im Sinne des Erfinders. Du könntest natürlich
Code:
class Node implements Comparable<String>
machen. Aber das wird Dir für sortierte Collections wie TreeSet nichts nützen.
 
edit: je nachdem wo die Fehlermeldung auftrittt, gibt mehrere Interpretationen, EikeB hat eine andere beschrieben,

verwende nicht Object als keyWert, sondern das Interface Comparable,
das musst du an vielen Stellen umändern,

aber einen anderen Weg gibts kaum, wenn du nur beliebige Objekte zuläßt, ist ein Vergleich nicht möglich,
mit 'Wie compareTo() Methode implementieren' hat das zwar zu tun, aber nur weniger, diese Methode kann nicht zaubern,
erst musst du immer per Hand/ Kopf entscheiden/ vordenken, was im Einzelfall zu tun ist,

du könntest natürlich Object belassen und mit instanceof/ Cast einzelne Klassen wie String abdecken,
das ist aber nicht schön, dann lieber Comparable
 
er sagt mir cannot find symbol - method compareTo(java.lang.object) ????
Das hatten wir heute doch schon in Deinem anderen Thread. Du hast wohl wieder eine Variable vom Typ Object definiert (wie bei dem Object-Array im anderen Thread). Object hat keine compareTo-Methode. Definier Dir keyWert als String, wenn es einer ist oder ruf toString() auf, etwa so:
Java:
  return this.keyWert.toString().compareTo(current.keyWert.toString());
 
edit: je nachdem wo die Fehlermeldung auftrittt, gibt mehrere Interpretationen, EikeB hat eine andere beschrieben,

verwende nicht Object als keyWert, sondern das Interface Comparable,
das musst du an vielen Stellen umändern,

aber einen anderen Weg gibts kaum, wenn du nur beliebige Objekte zuläßt, ist ein Vergleich nicht möglich,
mit 'Wie compareTo() Methode implementieren' hat das zwar zu tun, aber nur weniger, diese Methode kann nicht zaubern,
erst musst du immer per Hand/ Kopf entscheiden/ vordenken, was im Einzelfall zu tun ist,

du könntest natürlich Object belassen und mit instanceof/ Cast einzelne Klassen wie String abdecken,
das ist aber nicht schön, dann lieber Comparable

kannst du mir sagen wie das interface Comparable vom Aufbau her aussehen muss?
Ich müsste ja bei verschiedenen Objekten immer casten, bzw immer andere Eigenschaften miteinander vergleichen, aber hier in dem Fall reicht es schon wenn ich nur Strings miteinander vergleiche....
 
Ich müsste ja bei verschiedenen Objekten immer casten, bzw immer andere Eigenschaften miteinander vergleichen
Genau das geht nicht. Du kannst nicht "Äpfel mit Birnen" vergleichen, sondern nur Äpfel mit Äpfeln und Birnen mit Birnen. Wenn Du mit Generics arbeitest, fällt das Casten sowieso weg und auch Apfel.compareTo(Birne) würde schon zur Compilezeit einen Fehler bringen. Wenn du ohne Generics arbeitest würde spätestens beim Casten von Birne auf Apfel eine Exception fliegen.
 
wenn du als Variable/ Paramtertyp überall Comparable statt Object schreibst, dann funktioniert der Aufruf compareTo() für die Werte,
mehr musst du nicht machen, der Aufrufer muss darauf achten, nur Comparable, wie z.B. Strings zu übergeben

oder du bleibst bei Object und prüfst wie gesagt mit instanceof ob String vorliegt, dann Casten,
(wenn du dir unter diesen Stichwörtern nichts vorstellen kannst, kann man auch nach ihnen suchen)
 

Zurück
Oben