Реализация метода равных с использованием CompareTo

Общий вопрос: при реализации переопределения по умолчаниюequals метод в Java, какие проблемы я должен иметь о простом использовании уже реализованногоcompareTo метод против записи независимой логики в метод equals? Я заметил, что кто-то упомянул в другом вопросе, чтоfoo.equals((String)null) возвращает ложь, тогда какString.compareTo((String)null) бросаетNullPointerException, Что делает эти противоречивые результаты идеальной функциональностью?

Образецequals метод:

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

Редактировать: Цитата из документации насравнимый

Говорят, что естественный порядок для класса C согласован с equals тогда и только тогда, когда e1.compareTo (e2) == 0 имеет то же логическое значение, что и e1.equals (e2) для всех e1 и e2 класса C. Обратите внимание, что null не является экземпляром какого-либо класса, и e.compareTo (null) должен выдавать исключение NullPointerException, даже если e.equals (null) возвращает false

Редактировать:

После дальнейшего рассмотрения, я считаю, чтосравнимый документация также гласит следующее:

Разработчик должен обеспечить sgn (x.compareTo (y)) == -sgn (y.compareTo (x)) для всех x и y. (Это означает, что x.compareTo (y) должно вызвать исключение, если y.compareTo (x) генерирует исключение.)

Эрго, так какnull.compareTo(x) очевидно бросаетNPE,x.compareTo(null) следует также бросить NPE. Принимая во внимание, что для равных это не обязательно так. Я довольно хорошо разбираюсь в правильном обращении с NPE, поэтому считаю это довольно значительным.

Ответы на вопрос(2)

Ваш ответ на вопрос