【问题标题】:Scala context bounds "imitation" for abstract type parametersScala 上下文限制抽象类型参数的“模仿”
【发布时间】:2019-12-22 04:41:34
【问题描述】:

我需要将一个 json 解析成几个可能的案例类:

trait Request {...}
case class RequestOne(...) extends Request
case class RequestTwo(...) extends Request

我创建了一个请求包装器:

trait RequestModel {
    type T <: Request 
    def parse(input: JValue): T = input.extract[T]
}

object RequestOneModel extends RequestModel {
    type T = RequestOne
}
object RequestTwoModel extends RequestModel {
    type T = RequestTwo
}

有个想法是让 RequestModels 类型为 [T] 以解析到其中。

上面的代码抛出“No Manifest available for RequestModel.this.T.”

【问题讨论】:

    标签: scala types implicit json4s scala-reflect


    【解决方案1】:

    尝试在方法中添加隐式参数

    trait RequestModel {
      type T <: Request
      def parse(input: JValue)(implicit manifest: Manifest[T]): T = input.extract[T]
    }
    

    【讨论】:

    • Scala 应该摆脱 trait 类型成员擦除并自动添加隐式 ClassTag
    猜你喜欢
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2015-10-15
    相关资源
    最近更新 更多