2016-04-10 14 views
0

暗黙的なクラスを使用してScalaのLocalDateオブジェクトに日を追加する方法を作成しようとしていますが、「LocalDateは最終クラスであり拡張できません」というエラーが継続的に発生します。スカラ暗黙の最終クラス

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) 
} 

} 

私はそうのようなクラスの振る舞いを有することに制限されたんだ:

(LocalDate.of(2015, 4, 14)) == (LocalDate.of(2015, 4, 12) + 2.days)

使用例:あなたはscala.concurrent.duration._org.joda.time._からの機能の混合物をしたいよう

val dateEx = LocalDate.of(2015, 3, 23) + 2.days 
assert(dateEx == LocalDate.of(2015, 3, 25)) 

おかげ

+0

java.timeを使用していますか?その場合、2つの 'LocalDate'を一緒に追加することはできません。 Scalaの '+'メソッドも提供していません。 –

+0

また、 "日"メソッドに3つの暗黙のInt引数を取り入れていますが、暗黙的な引数は型によって解決されるため、3つの引数すべてに常に同じ値が設定されます。 –

+0

貼り付けられた暗黙的なクラスと、それが動作する方法との間に多少の関係が見つかりません。 – pedrofurla

答えて

2

が鳴ります。

それは本当に別の日付に日付を追加しても意味がありませんと2.daysは本当に日付ではなく、むしろ期間ではありません。あなたは先に行くと、そのための新しいクラスを定義することによって、車輪を再発明することができます:

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を使用することができます。

DurationLocalDateに追加する暗黙のクラスを定義する必要もあります。

implicit class LocalDateOps(private val underlying: LocalDate) extends AnyVal { 
    def +(duration: Duration): LocalDate = ??? 
} 

はしかし、現在までに期間を追加するための機能がすでに実装されているライブラリ(のようなジョダ-時間)があります。

関連する問題