【发布时间】:2016-02-26 20:08:16
【问题描述】:
有没有办法让超类中的this 关键字引用该类的子类?具体来说,我正在尝试执行以下操作(Json 指的是 Play 的 Json 库):
abstract class A() {
def toJson[T](implicit writes: Writes[T]): JsValue = Json.toJson(this)
}
case class B(myProperty: String) extends A
object B { implicit val bFormat = Json.format[B] }
这给出了错误No Json serializer found for type A. Try to implement an implicit Writes or Format for this type.。所以说它不能序列化A 类型的对象,这是有道理的。然而,目标是让Json.toJson(this) 中的this 引用子类(在本例中为B)。
有没有办法做到这一点?如果没有,有没有其他方法可以在超类中实现Json.toJson(...) 方法而不必在子类(以及A 的所有其他子类)中实现?
【问题讨论】:
-
可以使用F-Bounded多态性:stackoverflow.com/questions/14741047/…
-
我建议改用类型类。例如。 argonaut.io/doc/codec
标签: scala inheritance implicit play-json