In Java wird kein Operator überladen. Sie kommen wahrscheinlich von einem C ++ Hintergrund.
Sie müssen die Methode compareTo
verwenden.
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.
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.
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.
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
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.
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.
Tags und Links java operators comparable compareto