我正在处理以下问题:
>>> 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
感谢