Scala 隐式最终 class
Scala implicit final class
我正在尝试创建一种方法,通过隐式 classes 将天数添加到 Scala 中的 LocalDate 对象,但我不断收到错误消息,说 "LocalDate is a final class and cannot be extended" 或以下:
scala:73: could not find implicit value for parameter year: Int
这是我尝试使用的代码:
implicit class UVMLocalDate(val me: Int) extends AnyVal{
implicit def days(implicit year: Int, month: Int, day: Int) {
LocalDate.of(year,month,me + days)
}
}
我只能让 class 表现得像这样:
(LocalDate.of(2015, 4, 14)) == (LocalDate.of(2015, 4, 12) + 2.days)
使用示例:
val dateEx = LocalDate.of(2015, 3, 23) + 2.days
assert(dateEx == LocalDate.of(2015, 3, 25))
谢谢
听起来您想要混合使用 scala.concurrent.duration._
和 org.joda.time._
的功能。
将一个日期添加到另一个日期并没有什么意义,2.days
并不是真正的 date 而是 duration。您可以继续为它定义一个新的 class 来重新发明轮子:
class Duration(millis: Long)
object Duration {
val SecondMillis = 1000
val MinuteMillis = SecondMillis * 60
val HourMillis = MinuteMillis * 60
val DayMillis = HourMillis * 24
implicit class DurationFromDays(private val underlying: Int) extends AnyVal {
def days: Duration = new Duration(underlying * DayMillis)
}
}
但是,您可以通过 scala.concurrent.duration.Duration
使用 API。
然后你还需要定义一个隐含的 class 来添加一个 Duration
到一个 LocalDate
.
implicit class LocalDateOps(private val underlying: LocalDate) extends AnyVal {
def +(duration: Duration): LocalDate = ???
}
但是,有些库(如 joda-time)已经实现了向日期添加持续时间的功能。
我正在尝试创建一种方法,通过隐式 classes 将天数添加到 Scala 中的 LocalDate 对象,但我不断收到错误消息,说 "LocalDate is a final class and cannot be extended" 或以下:
scala:73: could not find implicit value for parameter year: Int
这是我尝试使用的代码:
implicit class UVMLocalDate(val me: Int) extends AnyVal{
implicit def days(implicit year: Int, month: Int, day: Int) {
LocalDate.of(year,month,me + days)
}
}
我只能让 class 表现得像这样:
(LocalDate.of(2015, 4, 14)) == (LocalDate.of(2015, 4, 12) + 2.days)
使用示例:
val dateEx = LocalDate.of(2015, 3, 23) + 2.days
assert(dateEx == LocalDate.of(2015, 3, 25))
谢谢
听起来您想要混合使用 scala.concurrent.duration._
和 org.joda.time._
的功能。
将一个日期添加到另一个日期并没有什么意义,2.days
并不是真正的 date 而是 duration。您可以继续为它定义一个新的 class 来重新发明轮子:
class Duration(millis: Long)
object Duration {
val SecondMillis = 1000
val MinuteMillis = SecondMillis * 60
val HourMillis = MinuteMillis * 60
val DayMillis = HourMillis * 24
implicit class DurationFromDays(private val underlying: Int) extends AnyVal {
def days: Duration = new Duration(underlying * DayMillis)
}
}
但是,您可以通过 scala.concurrent.duration.Duration
使用 API。
然后你还需要定义一个隐含的 class 来添加一个 Duration
到一个 LocalDate
.
implicit class LocalDateOps(private val underlying: LocalDate) extends AnyVal {
def +(duration: Duration): LocalDate = ???
}
但是,有些库(如 joda-time)已经实现了向日期添加持续时间的功能。