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