Простейшая реализация `Comparable :: compareTo` - PullRequest
0 голосов
/ 09 мая 2019

Для класса StockQuote, реализующего Comparable< StockQuote > со свойством when типа LocalDateTime

public class StockQuote implements Comparable< StockQuote >
{
    private LocalDateTime when;
    …
}

… это следующеереализация Comparable::compareTo достаточно?

@Override
public int compareTo ( StockQuote that )
{
    return this == that ? 0 : this.getWhen().compareTo( that.getWhen() );
}

Первые проверки на идентичность объекта с this == that, объявив равенство:

  • , если обе ссылки указывают наодин и тот же объект или
  • , если оба имеют значение null.

Если не идентичен, этот код преобразует that в ожидаемый тип и извлекает объект when из обоих типов.Затем мы возвращаем результат вызова встроенного метода LocalDateTime::compareTo.Если this или that равны нулю, но не оба, выбрасывается NullPointerException.

Я задавался вопросом об использовании Objects.compareTo или Comparator.comparing.

1 Ответ

1 голос
/ 09 мая 2019

В соответствии с API Java , compareTo должен выдать NullPointerException, если его аргумент равен нулю.

Броски: NullPointerException - если указанный объект является нулевым

Проверка == является допустимой оптимизацией, но не обязательна. Вы можете просто отложить на LocalDate.compareTo() и назвать это днем:

return this.getWhen().compareTo( that.getWhen() );

Вы также можете отказаться от геттеров и получить прямой доступ к .when.

return this.when.compareTo( that.when );
...