密封特征的隐含转换

时间:2013-06-24 11:32:58

标签: scala implicit

我想为案例类创建隐式转换。这是我的域名:

case class WbProp(name:String,values:WbVal*)
sealed trait WbVal
case class WbLit(value:String) extends WbVal
case class WbRef(obj:String) extends WbVal

我想转换为lift-json对象,所以我有:

implicit def lit2json(r:WbLit) :JValue = ("@value"->r.value)
implicit def ref2json(r:WbRef) :JValue = ("@id"->r.obj)
implicit def prop2json(p:WbProp):JValue = JField(p.name,p.values) 
如果它具有从A-> JValue的转换,则json-lift可以将Seq [A]转换为JArray。但是,这不起作用 - 它无法从WbVal转换为json,所以我必须添加:

implicit def val2json(v:WbVal) : JValue = v match {
  case l:WbLit => lit2json(l)
  case r:WbRef => ref2json(r)
}

我希望拥有一个密封的特性和所有成员的隐含转换就足够了。有更优雅的方式吗?

0 个答案:

没有答案