compareTo() , rekursiver Aufruf?

Steve222

Mitglied
Hallo! :)

Einerseits kann ich meine Collection nach verschiedenen Kriterien sortieren, es klappt also alles
recht gut.
Andererseits frage ich mich ob bei #1 ein rekursiver Aufruf stattfindet.


In der API ist compareTo() bei interface Comparable mit einem variablen Typparameter versehen,
also so :

int compareTo(T o)

Eine ÜBERSCHREIBUNG von compareTo() wird gefordert wegen " implements Comparable<Person1>" und
das wäre eigentlich identische Signatur wie "int compareTo(T o)" ...!?

Java:
class Person1 implements Comparable<Person1>{ ...}
...
public int compareTo(Person1 o){               
                return  ((Integer)this.gewicht).compareTo(o.gewicht);     //  #1 
            }

Was für ein Aufruf ist in Zeile #1 , wenn es kein rekursiver Aufruf ist?

Danke für aufschlussreiche Erläuterungen.:)

Viele Grüße
Steve222
 
Zuletzt bearbeitet von einem Moderator:
Hallo HonniCilest,

und Danke.
Was ein interface ist und was dessen Zweck ist, weiß ich, denke ich, ganz gut.

Ich bin der Ansicht, dass in Zeile 3 bis 5 die geforderte Überschreibung von compareTo() ist und
verstehe nicht was Du mit
Es ist kein Aufruf, sondern eine Art Festlegung, Zugehörigkeit.
meinst.

Nach "return" kann und darf auch ein Methodenaufruf stehen und ich sehe
"((Integer)this.gewicht).compareTo(o.gewicht)" eher als Aufruf als sonstwas anderes.

viele Grüße
Steve222
 
Bei #1 steht kein rekursiver Aufruf. Hier werden statt der beiden Klasseninstanzen (zwei Objekte der Klasse Person1) nur die Werte der Variablen "gewicht" verglichen.

Ein rekursiver Aufruf würde die Funktion selbst nochmals ausführen. Kleines Beispiel:
Java:
int mul(int x, int i){
  if(i>0){
    return mul(x, i-1)+x;
  }else if(i<0){
    return -mul(x, -i);
  }else{
    return 0;
  }
}
 
Nein, das ist keine Rekursion. Da du das Gewicht in Integer castest wird die compareTo-Methode der Klasse Integer aufgerufen, nicht der Person1.
 
Tut mir Leid ich sehe jetzt grad erst den Kommentar hinter deiner Zeile 4, ich bin die ganze Zeit davon ausgegangen du meinst deine erste gepostete Zeile, daher war ich so verwirrt ;)

Es ist der Aufruf der gleichnamigen Methode einer anderen Klasse. Diese Klasse (Integer) implementiert aber auch das Interface Comparable, wodurch es auch die Methode compareTo besitzen muss. Und das meine ich mit "Festlegung". Wenn du weißt, dass eine Klasse das Interface implementiert, so weißt du sie besitzt auch die Methode(n).
Wie Ronaldo schon sagt, ein rekursiver Aufruf wäre es nur, wenn es die Methode der selben Klasse ist und nicht einfach nur den gleichen Namen trägt.
 

Neue Beiträge

Zurück