初始问题:
在 Scala 中,我想使用隐式Ordering[T]#Ops
来比较两个LocalDate
。
仅使用>
之类的“运算符”而不是isAfter
。
它应该只是一个导入:import scala.math.Ordering.Implicits._
检查:
看起来它可以与LocalTime
一起使用,而不能与LocalDate
一起使用,因为LocalTime
而非LocalDate
实现了Comparable<LocalTime>
。
问题:
我想知道,
为什么LocalDate
实现Comparable<ChronoLocalDate>
而不是Comparable<LocalDate>
?
答案 0 :(得分:7)
LocalDate
实际上是implements Comparable<ChronoLocalDate>
以及ChronoLocalDate
,并且通过实现这两个实例,它的每个实例当然都可以与另一个LocalDate
实例相比。
您可以在Oracle网站上查看JavaDocs for LocalDate
。
ChronoLocalDate
是由不同类型的日历实现的界面,以使它们彼此具有可比性。那是因为有JapaneseDate
,ThaiBuddhistDate
,HijrahDate
和至少一个。完全可以相互比较的完全不同的日历,这很棒。另一方面,LocalTime
只是具有不同时区的时间表示,而不必走这种接口即可与不同区域的时间表示相比。
答案 1 :(得分:3)
要使操作员正常工作,除了导入之外,您还需要另外一行定义所需的Ordering
(假设Scala 2.12):
implicit val localDateOrdering: Ordering[LocalDate] = _.compareTo(_)
如果要在许多类中使用它,请在object
中定义它,并在必要时导入。