【问题标题】:Why LocalDate doesn't implements Comparable<LocalDate>?为什么 LocalDate 不实现 Comparable<LocalDate>?
【发布时间】:2019-05-02 13:22:33
【问题描述】:

最初的问题:

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

它只是使用像&gt; 这样的“运算符”而不是isAfter

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

检验:

看起来它适用于LocalTime,但不适用于LocalDate,因为LocalTime 而不是LocalDate 实现了Comparable&lt;LocalTime&gt;

问题:

我想知道,

为什么LocalDate 实现Comparable&lt;ChronoLocalDate&gt; 而不是Comparable&lt;LocalDate&gt;

【问题讨论】:

标签: java scala implicit-conversion comparable localdate


【解决方案1】:

LocalDate 实际上是 implements Comparable&lt;ChronoLocalDate&gt;ChronoLocalDate,通过实现这两个,它的每个实例当然可以与另一个 LocalDate 实例相媲美。

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

ChronoLocalDate 是一个接口,由不同类型的日历实现,以使它们彼此可比较。那是因为有JapaneseDateThaiBuddhistDateHijrahDate 至少还有一个。完全不同的日历都可以相互比较,这很棒。另一方面,LocalTime 只是具有不同时区的时间表示,而不必采用这种接口方式来与不同地区的时间表示进行比较。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-01-30
      • 2019-06-15
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 2020-05-07
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多