Java - compareTo und Operatoren

8

Wenn ich eine Klasse Person habe, die Comparable implementiert (z. B. personA.height mit personB.height ), ist es möglich,

zu verwenden %Vor%

als Ersatz für

%Vor%

Gibt es irgendwelche Probleme dabei oder muss ich Betreiber überlasten?

    
Chet 20.01.2012, 18:25
quelle

6 Antworten

6

In Java wird kein Operator überladen. Sie kommen wahrscheinlich von einem C ++ Hintergrund.

Sie müssen die Methode compareTo verwenden.

    
Luchian Grigore 20.01.2012, 18:27
quelle
14

Nein, es ist nicht möglich, personA < personB als Ersatz zu verwenden. Und Sie können keine Operatoren in Java überladen.

Außerdem würde ich empfehlen,

zu ändern %Vor%

bis

%Vor%

Was Sie jetzt haben, funktioniert wahrscheinlich für Ihre Klasse. Allerdings ist der Vertrag auf compareTo() ist, dass ein negativer Wert zurückgegeben wird, wenn personA kleiner als personB ist. Dieser negative Wert muss nicht -1 sein, und Ihr Code könnte brechen, wenn er mit einer anderen Klasse verwendet wird. Es könnte auch brechen, wenn jemand die Methode compareTo() Ihrer Klasse in eine andere - aber dennoch konforme - Implementierung ändern würde.

    
NPE 20.01.2012 18:26
quelle
5

Es ist nicht möglich, nein; und Java unterstützt nicht das Überladen von Operatoren (neben den integrierten Überladungen).

Übrigens, anstatt == -1 zu schreiben, sollten Sie < 0 schreiben. compareTo wird nur benötigt, um einen negativen / Null / positiven Wert zurückzugeben, nicht spezifisch -1/0/1.

    
ruakh 20.01.2012 18:28
quelle
1

Nein, das "& lt;" Kompiliert nicht, wenn es auf Objekte angewendet wird. Achten Sie auch auf Ihren Test:

%Vor%

Die API-Dokumentation sagt lediglich, dass compareTo () eine negative Ganzzahl zurückgibt, wenn das Objekt kleiner als das angegebene Objekt ist, das nicht notwendigerweise -1 ist. Verwenden Sie

%Vor%

stattdessen.

    
Stevens Miller 20.01.2012 18:35
quelle
1

Es ist nicht möglich, Java gibt Ihnen keine Überlastung des Bedieners.
Aber eine weitere OO-Option ist das Hinzufügen einer Methode innerhalb von Person

%Vor%

also anstatt zu schreiben

%Vor%

Sie können

schreiben %Vor%

IMHO ist es besser lesbar, weil es Details verbirgt und es in Domain-Sprache statt Java-Besonderheiten ausgedrückt wird.

    
Pablo Grisafi 20.01.2012 18:48
quelle
1

Java hat keinen Operator, der 1 überlädt, also gibt es ein Problem: das ist nicht möglich.

1 Es gibt natürlich ein paar Überladungen: Der Operator + arbeitet mit ganzzahligen Typen, Fließkommatypen und mit String s. Aber Sie können nicht Ihre eigenen definieren.

    
Ernest Friedman-Hill 20.01.2012 18:27
quelle