1

我正在尝试制作一个从 JValue(来自 json4s)到 Scala 案例类(包含尖顶数字存在类型)的通用映射器,反之亦然,其 scala 案例类类似于:

case class SomeStat[T : Numeric](a:T, b:T)

对于通用映射器,我有类似的东西:

final class SynchronizerClass[B : Numeric, A <: SomeStat[B]](implicit manifest: Manifest[B], a:Manifest[A])
{format => (
  {case j:JValue => {
    implicit val formats = format
    def extractNumber(j:JValue) = {
      for {
        a <- scala.util.Try((j \ "a").extract[B]).toOption
        b <- scala.util.Try((j \ "b").extract[B]).toOption
      } yield {
        SomeStat(a,b).asInstanceOf[A]
      }
    }
    (extractNumber(j)) getOrElse {
      throw new MappingException("Invalid Number Type")
    }
  }},
  {case x:SomeStat[A] =>
    implicit val formats = format
    Map(
      "a" -> Extraction.decompose(x.a),
      "b" -> Extraction.decompose(x.b)
    )}
  )}

问题是 spire 隐式有两个数字,作为一个例子,我试图构建这样的东西

val j:JValue = ??? // Some Json Value
val someStat = Extraction.decompose(SomeStat[BigDecimal](j))
4

0 回答 0