Не всі об'єкти можна порівняти, але всі об’єкти можна перевірити на рівність. Якщо нічого іншого, то можна побачити, чи є два об’єкти в одному місці в пам'яті (еталонна рівність).
Що це означає для compareTo()
двох Thread
об'єктів? Як одна нитка "більша за" іншу? Як ти порівнюєш дваArrayList<T>
с?
Object
Договір стосується всіх класів Java. Якщо навіть один клас не можна порівняти з іншими примірниками власного класу, тоObject
не може вимагати, щоб він був частиною інтерфейсу.
Джошуа Блох використовує ключові слова "природне впорядкування", коли пояснює, чому клас може хотіти реалізувати Comparable
. Не кожен клас має природне впорядкування, як я згадував у своїх прикладах вище, тому не кожен клас повинен реалізовувати, Comparable
а також не повинен Object
мати compareTo
метод.
... compareTo
метод не оголошено в Object
. ... Він схожий за характером Object
з equals
методом, за винятком того, що дозволяє порівняти замовлення на додаток до простих порівнянь рівності, і він є загальним. Реалізуючи Comparable
, клас вказує, що його екземпляри мають природне впорядкування .
Ефективна Java, друге видання : Джошуа Блох. Пункт 12, стор. 62. Еліпси видаляють посилання на інші глави та приклади коду.
Для випадків , коли ви дійсно хочете , щоб накласти впорядкування на не- Comparable
класу , який не має природний порядок, ви завжди можете поставити Comparator
екземпляр для допомоги розбирайтеся.