Почему LocalDate не реализует Comparable <LocalDate>? - PullRequest
0 голосов
/ 30 ноября 2018

Исходная проблема:

В Scala , я хотел бы использовать неявное Ordering[T]#Ops для сравнения двух LocalDate.

Этопросто использовать «операторы», такие как > вместо isAfter.

Это должен быть просто импорт: import scala.math.Ordering.Implicits._

Проверка:

Похоже, он работает с LocalTime и не с LocalDate, потому что LocalTime вместо LocalDate реализует Comparable<LocalTime>.

Вопрос:

Интересно,

Почему LocalDate реализует Comparable<ChronoLocalDate> вместо Comparable<LocalDate>?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Чтобы операторы работали, вам нужна еще одна строка в дополнение к импорту, определяющая желаемое Ordering (при условии Scala 2.12):

implicit val localDateOrdering: Ordering[LocalDate] = _.compareTo(_)

Если вы хотите использовать его во многих классах,определите его в object и импортируйте при необходимости.

0 голосов
/ 30 ноября 2018

LocalDate на самом деле implements Comparable<ChronoLocalDate>, а также ChronoLocalDate и, реализуя эти два, каждый его экземпляр, конечно, сопоставим с другим LocalDate экземпляром.

Вы можете взглянуть на JavaDocs для LocalDate на веб-сайте Oracle.

ChronoLocalDate - это интерфейс, который реализуется различными типами календарей, чтобы сделать их все сопоставимыми сдруг с другом.Это потому, что есть JapaneseDate, ThaiBuddhistDate, HijrahDate и по крайней мере еще один.Совершенно разные календари, которые все сопоставимы друг с другом, и это здорово.LocalTime, с другой стороны, является просто временным представлением с разными часовыми поясами, и ему просто не нужно идти по этому интерфейсу, чтобы быть сопоставимым с временными представлениями разных языковых стандартов.

...