【发布时间】:2017-11-02 13:31:38
【问题描述】:
我知道有一个类似 api 的 xpath 可以从 Json4s 中的 JObject 中获取字段
val x = (obj \ "Type").asInstanceOf[JString].values
但是感觉有点麻烦,而且我不喜欢 api 之类的符号。我有点想要这样的东西:
implicit class JsonExtensions(json: JObject) {
def get[T <: JValue](key: String) : T.Values = {
(json \ key).asInstanceOf[T].values
}
}
并像这样使用它
val x = obj.get[String]("type")
但是它不能编译,T 的上限是一个 JValue,所以我希望能够引用所有 JValue 上的类型成员 Values。作为参考,他是 JValue 的狙击手:
sealed abstract class JValue extends Diff.Diffable with Product with Serializable {
type Values
def values: Values
...
}
我是 scala 新手,如何让编译器满意?
【问题讨论】:
-
试试
JValue#Values,见这里:docs.scala-lang.org/overviews/quasiquotes/… -
谢谢
标签: scala generics json4s scala-generics type-members