Implementando o método equals usando compareTo

Pergunta geral: Ao implementar uma substituição do padrãoequals método em Java, o que eu deveria ter preocupações sobre simplesmente utilizando um já implementadocompareTo método vs escrever lógica independente no método equals? Eu notei alguém mencionar em outra pergunta quefoo.equals((String)null) retorna falso enquantoString.compareTo((String)null) lança umNullPointerException. O que torna esses resultados inconsistentes a funcionalidade ideal?

Amostraequals método:

@Override
public boolean equals(Object obj) {
    if (obj != null && obj instanceof MyClass) {
        MyClass msg = (MyClass)obj;
        return this.compareTo(msg) == 0;
    }
    return false;
}

Editar: Cite da documentação sobreComparável

A ordenação natural para uma classe C é dita consistente com equals se e somente se e1.compareTo (e2) == 0 tiver o mesmo valor booleano que e1.equals (e2) para cada e1 e e2 da classe C. Note que null não é uma instância de qualquer classe e e.compareTo (null) deve lançar um NullPointerException mesmo que e.equals (null) retorne false

Editar:

Depois de mais uma revisão, percebo que oComparável documentação também afirma o seguinte:

O implementador deve garantir sgn (x.compareTo (y)) == -sgn (y.compareTo (x)) para todos os x e y. (Isto implica que x.compareTo (y) deve lançar uma exceção iff y.compareTo (x) lança uma exceção.)

Ergo, desdenull.compareTo(x) obviamente lança umNPE, x.compareTo(null) deve lançar um NPE também. Considerando que para iguais, isso não é necessariamente o caso. Eu sou muito bom no tratamento adequado de NPEs, então acho isso relativamente significativo.

questionAnswers(2)

yourAnswerToTheQuestion