compareTo(String arg) überschreiben

Keen

Mitglied
Ich möchte die Methode compareTo(String arg) überschreiben.

Java:
public class Com implements Comparable<String>{

	public static void main(String[] args) {
		String string = "Hallo";
		String string2 = "ABC";
		
		System.out.println(string.compareTo(string2));
	}

	@Override
	public int compareTo(String arg) {
		if (arg.charAt(0) < this.toString().charAt(0)) {
			return -1;
		} else if (arg.charAt(0) > this.toString().charAt(0)) {
			return 1;
		} else {
			return 0;
		}
	}

}

Beim sysout in Zeile 8 gibt er 7 zurück. Somit benutzt er immernoch die "normale" compareTo(String arg) Methode und nicht meine überschriebene.
Wie er sortieren soll ist für mich nicht wichtig. Ich möchte nur wissen, wieso er nicht meine compareTo(String arg) Methode verwendet.
Ich stehe irgendwie auf dem Schlauch. Vielleicht kann mir ja jemand von euch netterweise helfen? 🙂
 
Weil deine "compareTo" Methode nur Objekte vom Typ "Com" betrifft.
Du vergleichst aber String Objekte. Daher wird auch die "compareTo" Methode der Klasse String verwendet.
 
Vielen Dank schonmal!
Klingt logisch. Ich kann also nur die compareTo()-Methode der jeweiligen Klasse implementieren.
Was mache ich dann, wenn ich String-Objekte in der Klasse Com z.B. nach dem zweiten Buchstaben sortieren will?
Dazu müsste ich ja dann die compareTo()-Methode in der Klasse String verändern. Wie mache ich das?
 
Das geht nicht soweit ich weiß.
Dadurch würdest du ja das generelle Verhalten der String Klasse ändern. Verwendest du nun eine Library könnte das unerwünschte Folgen haben.

Du kannst aber eine Utility Methode schreiben welche 2 String entgegennimmt. Die Methode führt dann deinen Vergleich durch.

Java:
public static int compareStrings(String first, String second) {
   // DEIN CODE
}

.....

// Aufruf
String s1 = "Hallo";
String s2 = "Tschüss";

int x = compareStrings(s1, s2);
 

Zurück
Oben