:
final class Instant private(private val seconds: Long, private val nanos: Int) extends TemporalAccessor with Temporal with TemporalAdjuster with Ordered[Instant] with Serializable
final class LocalTime(_hour: Int, _minute: Int, _second: Int, private val nano: Int) extends TemporalAccessor with Temporal with TemporalAdjuster with Ordered[LocalTime] with Serializable
final class OffsetDateTime private(private val dateTime: LocalDateTime, private val offset: ZoneOffset) extends Temporal with TemporalAdjuster with Ordered[OffsetDateTime] with Serializable
final class OffsetTime(private val time: LocalTime, private val offset: ZoneOffset) extends TemporalAccessor with Temporal with TemporalAdjuster with Ordered[OffsetTime] with Serializable
final class LocalDate private(private val year: Int, monthOfYear: Int, dayOfMonth: Int) extends ChronoLocalDate with Temporal with TemporalAdjuster with Serializable
final class LocalDateTime private(private val date: LocalDate, private val time: LocalTime) extends ChronoLocalDateTime[LocalDate] with Temporal with TemporalAdjuster with Serializable
final class ZonedDateTime(private val dateTime: LocalDateTime, private val offset: ZoneOffset, private val zone: ZoneId) extends ChronoZonedDateTime[LocalDate] with Temporal with Serializable
ここでは、クラスの署名は、これらの最後の3つのChrono*
特性のためですあなたが持っているものよりも、単純に暗黙のうちに密閉型の家系を使用して、すべてを抽象化します。これはまた、定義されていないクラスのために自分自身を注文する機会を与えます。再記述することができ
final case class Interval[
T <: Temporal with Serializable
](start: T, end: T)(implicit def ordering: Ordering[T])
:あなたは今、安全にScalaはあなたの順序を操作する2つの方法を可能にするという事実を利用することができます
final case class Interval[
T <: Temporal with Serializable : Ordering
](start: T, end: T)
、一つは、相続経由のJavaの古い学校の方法です(Comparable
を実装する)、Scalaの場合はOrdered
、もう1つはOrdering[T]
です。これは常に暗黙のスコープを通過します。
そして、あなたはあなたのクラスの独立のために供給することによってそれを行うことができます:あなたが順序を必要と種類ごとに、その上
object TimeOrdering {
implicit object ChronoLocalDateOrdering extends Ordering[ChronoLocalDate] {
override def compare(x: ChronoLocalDate, y: ChronoLocalDate): Int = ???
}
}
をと。
次に、あなたは簡単に行うことができます。
val x: ChronoLocalDate = ...
val y: ChronoLocalDate = ...
import TimeOrdering._ // to get the implicits in scope.
val interval = Interval(x, y)