习惯使用Java可比对象

Hep*_*tic 15 scala scala-java-interop

我正在使用一些java.util.Date(它实现java.lang.Comparable)并且希望能够很好地使用它,例如使用<和> =而不是"compareTo(other)== 1".有没有一种很好的方法可以很容易地混合scala.math.Ordered之类的东西没有很多锅炉板?

Gar*_*owe 13

在Ordering伴侣对象中,存在从Comparable [A]到Ordering [A]的隐式转换.所以你可以这样做:

import java.util.Date

val dateOrdering = implicitly[Ordering[Date]]
import dateOrdering._

val now = new Date
val then = new Date(now.getTime + 1000L)

println(now < then) // true
Run Code Online (Sandbox Code Playgroud)

  • 一个小小的警告:如果你有一个继承自`A implements Comparable <A>`(Java语法)的类`B`,你不能得到`隐式[Ordering [B]]`.你必须使用`隐式[Ordering [A]]`. (4认同)

小智 8

我知道这是一个老问题,但这是一个稍微简单的解决方案,当提出问题时可能无法提供.

import scala.math.Ordering.Implicits._
Run Code Online (Sandbox Code Playgroud)

Comparable然后,任何实现的Java类型都应该与比较运算符无缝地协作.例如,

import java.time.Instant

val x = Instant.now()
val y = x.plusSeconds(1)

print(x < y)   // prints true
print(x <= y)  // prints true
print(x > y)   // prints false
Run Code Online (Sandbox Code Playgroud)