zunächst einmal das UML Diagramm von dem Programm:
Also: Ich habe in der main Klasse eine Liste, in der ich 2 verschiedene Objekte speichere. Einmal Objekte von der Klasse Fahrrad und einmal Objekte von der Klasse Kraftfahrzeug. Diese beiden Klassen erben von Fahrzeug, in der der Modellname drin steht.
Jetzt möchte ich die Liste nach den Modellnamen sortieren lassen mit Compareable.
So habe ich die Liste nun an die Sortiermethode übergeben:
public void sortiereNachName(List<Object> objektliste)
Wenn ich jetzt aber weiter programmiere bis zu dem Punkt wo aus beiden Objekten die Modellnamen verglichen werden sollen, geht das nicht, weil ich einen cast vorher drauf machen muss ? Mit dem Programmbeispiel unseres Lehrers geht das auch ohne Casts (er hat das allerdings mit Arrays gemacht)
ob array oder Liste sollte keinen Unterschied machen.
Vorschlagen würde ich dir dass du den generischen Typ deiner Liste von Object auf Fahrzeug änderst..
Danach würde ich dir einfach einen Comperator empfehlen, und Collections.sort aufzurufen.
(schöner wäre es wenn du den Comperator in eine eigene Varibale / eigene Klasse auslagers, ich machs jetzt nur so damits kürzer ist)
Genauso sieht das Beispielprogramm quasi aus von unserem Lehrer bloß mit Arrays, ich habe es jetzt so umgeändert, dass es mit Listen geht. Bekomme aber noch 2 Fehler mit denen ich nicht weiter weiss (sind im Quelltext unterstrichen):
1. The type Fahrzeug must implement the inherited abstract method Comparable<Fahrzeug>.compareTo(Fahrzeug)
2. The method compareTo(String) in the type String is not applicable for the arguments (Fahrzeug)
So geht´s zwar auch, ist aber ziemlicher Unsinn. Wenn du schon Fahrzeug das Interface implementieren lässt und dir dann eine passende Compare-Methode schreibst, kannst du die auch nutzen, im Moment nutzt du nämlcih die compareTo-Methode von String.
So müsste´s lauten:
Java:
if(liste.get(i).compareTo(liste.get(i+1))==0){
Du musst überdies auf 0 testen, da nur dies Gleichheit der beiden Objekte bedeutet (1 wäre >, -1 wäre kleiner... ob das bei Fahrzeugen irgendeinen Sinn ergibt, wage ich jetzt mal zu bezweifeln). Wenn du witrklich nur auf Gleichheit prüfen willst. brauchst du kein
Code:
Compareable
, dafür brauchst du nur die
Code:
equals
-Methode von
Code:
Object
überschreiben.
[EDIT]Achja, geht ja um Sortierung, dann wirst du wohl das Interface brauchen, hab ich übersehen[/EDIT]