为什么LocalDate不实现Comparable <localdate>?

时间:2018-11-30 11:27:51

标签: java scala implicit-conversion comparable localdate

初始问题:

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

仅使用>之类的“运算符”而不是isAfter

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

检查:

看起来它可以与LocalTime一起使用,而不能与LocalDate一起使用,因为LocalTime而非LocalDate实现了Comparable<LocalTime>

问题:

我想知道,

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

2 个答案:

答案 0 :(得分:7)

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

您可以在Oracle网站上查看JavaDocs for LocalDate

ChronoLocalDate是由不同类型的日历实现的界面,以使它们彼此具有可比性。那是因为有JapaneseDateThaiBuddhistDateHijrahDate和至少一个。完全可以相互比较的完全不同的日历,这很棒。另一方面,LocalTime只是具有不同时区的时间表示,而不必走这种接口即可与不同区域的时间表示相比。

答案 1 :(得分:3)

要使操作员正常工作,除了导入之外,您还需要另外一行定义所需的Ordering(假设Scala 2.12):

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

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