Implementando el método equals usando compareTo

Pregunta general: Cuando se implementa una anulación de la predeterminadaequals método en Java, ¿qué preocupaciones debo tener acerca de simplemente utilizar un ya implementado?compareTo ¿Método vs escritura de lógica independiente en el método de iguales? Noté que alguien mencionó en otra pregunta quefoo.equals((String)null) devuelve falso mientrasString.compareTo((String)null) arroja unNullPointerException. ¿Qué hace que estos resultados inconsistentes sean una funcionalidad ideal?

Muestraequals 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: Cita de la documentación sobreComparable

El orden natural para una clase C se dice que es consistente con igual si y solo si e1.compareTo (e2) == 0 tiene el mismo valor booleano que e1.equals (e2) para cada e1 y e2 de la clase C. Observe que null no es una instancia de ninguna clase, y e.compareTo (null) debería lanzar una NullPointerException aunque e.equals (null) devuelva false

Editar:

Después de una revisión adicional, me parece notable que laComparable La documentación también establece lo siguiente:

El implementador debe asegurarse de que sgn (x.compareTo (y)) == -sgn (y.compareTo (x)) para todas las x y y. (Esto implica que x.compareTo (y) debe lanzar una excepción si y.compareTo (x) lanza una excepción).

Ergo, desdenull.compareTo(x) obviamente lanza unNPE, x.compareTo(null) También debe lanzar un NPE. Mientras que para los iguales, ese no es necesariamente el caso. Soy bastante grande en el manejo adecuado de las NPE, por lo que encuentro esto relativamente significativo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta