Nem todos os objetos podem ser comparados, mas todos os objetos podem ser verificados quanto à igualdade. Se nada mais, é possível ver se existem dois objetos no mesmo local na memória (igualdade de referência).
O que isso significa compareTo()
em dois Thread
objetos? Como um segmento é "maior que" outro? Como você compara dois ArrayList<T>
s?
O Object
contrato se aplica a todas as classes Java. Se nem uma classe puder ser comparada a outras instâncias de sua própria classe, Object
não será possível exigir que ela faça parte da interface.
Joshua Bloch usa as palavras-chave "ordenação natural" ao explicar por que uma classe pode querer implementar Comparable
. Nem toda classe tem uma ordem natural, como mencionei nos meus exemplos acima, portanto nem toda classe deve implementar Comparable
nem deve Object
ter o compareTo
método.
... o compareTo
método não está declarado em Object
. ... É de caráter semelhante ao método de Object
s equals
, exceto pelo fato de permitir comparações de ordem, além de comparações simples de igualdade, e é genérico. Ao implementar Comparable
, uma classe indica que suas instâncias têm uma ordem natural .
Java eficaz, segunda edição : Joshua Bloch. Item 12, Página 62. As elipses removem referências a outros capítulos e exemplos de código.
Para os casos onde não querem impor uma ordenação em um não- Comparable
classe que não tem uma ordem natural, você sempre pode fornecer uma Comparator
instância para ajudar a resolver isso.