Не все объекты можно сравнивать, но все объекты можно проверить на равенство. Если ничего другого, то можно увидеть, существуют ли два объекта в одном и том же месте в памяти (равенство ссылок).
Что это значит для compareTo()
двух Thread
объектов? Как один поток "больше" другого? Как вы сравниваете два ArrayList<T>
с?
Object
Договор относится ко всем классам Java. Если даже один класс нельзя сравнить с другими экземплярами его собственного класса, он Object
не может требовать, чтобы он был частью интерфейса.
Джошуа Блох использует ключевые слова «естественный порядок», когда объясняет, почему класс может захотеть реализовать Comparable
. Не каждый класс имеет естественный порядок, как я упоминал в моих примерах выше, поэтому не каждый класс должен реализовывать и Comparable
не должен Object
иметь compareTo
метод.
... compareTo
метод не объявлен в Object
. ... Он похож по своему характеру Object
«S equals
методе, за исключением того, что она позволяет сравнивать порядок , в дополнении к простым сравнению равенства, и это является общим. Реализуя Comparable
, класс указывает, что его экземпляры имеют естественный порядок .
Эффективная Java, второе издание : Джошуа Блох. Пункт 12, стр. 62. Эллипсы удаляют ссылки на другие главы и примеры кода.
Для случаев , когда вы действительно хотите , чтобы наложить упорядочение на не- Comparable
класса , который не имеет естественный порядок, вы всегда можете поставить Comparator
экземпляр для помощи разбирайтесь.