为什么 LocalDate 没有实现 Comparable<LocalDate>?

Why LocalDate doesn't implements Comparable<LocalDate>?

初始问题:

Scala 中,我想使用隐式 Ordering[T]#Ops 来比较两个 LocalDate.

它只是为了像 > 一样使用 "operators" 而不是 isAfter

它应该只是一个导入:import scala.math.Ordering.Implicits._

检验:

看起来它适用于 LocalTime 而不适用于 LocalDate 因为 LocalTime 而不是 LocalDate 实现了 Comparable<LocalTime>.

问题:

我想知道,

为什么 LocalDate 实现 Comparable<ChronoLocalDate> 而不是 Comparable<LocalDate>

LocalDate 事实上 implements Comparable<ChronoLocalDate> 以及 ChronoLocalDate 并且通过实现这两个,它的每个实例当然都可以与另一个 LocalDate 实例进行比较。

你可以看看Oracle网站上的JavaDocs for LocalDate

ChronoLocalDate is an interface that is implemented by different types of calendars in order to make them all comparable to each other. That is because there are JapaneseDate, ThaiBuddhistDate, HijrahDate 至少还有一个。完全不同的日历都可以相互比较,这很棒。另一方面,LocalTime 只是具有不同时区的时间表示,只是不必采用这种界面方式即可与不同语言环境的时间表示相比较。

为了使运算符工作,除了导入之外,您只需要另一行,定义所需的 Ordering(假设 Scala 2.12):

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

如果您想在多个 类 中使用它,请在 object 中定义它并在必要时导入。