实施游戏! json读/写类型参数类

时间:2014-04-23 15:09:54

标签: json scala types playframework-2.0

我正在处理以下问题:

>>> A.scala 
abstract class A[T <: A[T]](field:String){
   def ~>(a : T):Boolean
}
<<<<

>>> B.scala
case class B(field:String,field1:String) extends A[B](field){
  override def ~>(other: B): Boolean = 
   field == other.field && field1 == other.field1
}
object B{

 implicit object BFormat extends Format[B] {

  override def reads(json:JsValue):JsResult[B] = JsSuccess(new B(
    (json \ "pathTo" \ "field").as[String],
    (json \ "pathTo" \ "field1).as[String]
  ))
  override def writes(b:B):JsValue = Json.obj(
    "field" -> b.field,
    "field1" -> b.field1
  )

 }

 def simpleB = new B("foo","bar")
}
<<<<

超类T中的参数A在方法~>中(间接)使用,该方法执行与必须的其他对象之间的匹配属于同一类型。它有效但是 现在我想写Play Framework的读/写格式组合器! 2.2.2类A的json库但我被卡住了,因为我不知道如何实现它,使用伴侣对象我无法注释类型参数(在伴随对象中),即使我延伸Format[A[T]]我不知道如何实施

implicit def reads(json: JsValue): JsResult[A[T]]
implicit def writes(o: A[T]): JsValue

我已经知道A的子类,它们是两个并且已经实现了json的读/写但是我无法为具有类型参数(其中的类型)的超类A执行此操作我知道我可以使用json读/写),任何线索?

示例和错误:

def getMyA[T <: A[T]](json:JsValue):Option[T] =
 (json \ "mypath").asOpt[T]

 diverging implicit expansion for type play.api.libs.json.Reads[T] starting with method GenericFormat in trait DefaultFormat

感谢

0 个答案:

没有答案