Nie wszystkie obiekty można porównać, ale wszystkie obiekty można sprawdzić pod kątem równości. Jeśli nic więcej, można sprawdzić, czy dwa obiekty istnieją w tym samym miejscu w pamięci (równość odniesienia).
Co to znaczy compareTo()
na dwóch Thread
obiektach? W jaki sposób jeden wątek jest „większy niż” inny? Jak porównać dwa ArrayList<T>
s?
Object
Umowa ma zastosowanie do wszystkich klas Java. Jeśli nawet jednej klasy nie można porównać do innych instancji własnej klasy, Object
nie może wymagać, aby była częścią interfejsu.
Joshua Bloch używa słów kluczowych „porządek naturalny”, wyjaśniając, dlaczego klasa może chcieć zaimplementować Comparable
. Nie każda klasa ma naturalne uporządkowanie, jak wspomniałem w moich przykładach powyżej, więc nie każda klasa powinna implementować Comparable
ani nie powinna Object
mieć tej compareTo
metody.
... compareTo
metoda nie jest zadeklarowana w Object
. ... Jest on podobny w charakterze do Object
„s equals
metody, oprócz tego, że pozwala na porównanie rzędu oprócz prostych porównań równości i jest rodzajowy. Poprzez implementację Comparable
klasa wskazuje, że jej instancje mają naturalną kolejność .
Effective Java, Second Edition : Joshua Bloch. Punkt 12, strona 62. Elipsy usuwają odniesienia do innych rozdziałów i przykładów kodu.
W przypadkach, gdzie nie chcą narzucić kolejność na niebędącego Comparable
klasy, które nie mają naturalną kolejność, zawsze można dostarczyć Comparator
instancji to rodzaj pomocy.