我想知道是否有办法确保伴侣对象具有它所伴随的类的隐式Json formatter
:
trait Entity {
val id: Int
}
case class Foo(id: Int) extends Entity
object Foo {
implicit val jsonFormatter = Json.format[Foo]
}
例如:
trait DAO[A <: Entity] {
def get[A](id: Int) = {
val docs: JsValue = ???
Json.fromJson[A](docs)
}
}
在这种情况下,当它尝试将json转换为case类时,它将找不到隐式转换器。有什么想法可以解决这个问题吗?
答案 0 :(得分:3)
好吧,如果找不到隐式错误,你已经有了一个编译器错误,并且它没有那么好。但是,如果您在使用格式化程序时遇到困难,那么因为您正在为每个可能的Entity
类型执行此操作:
trait DAO[A <: Entity] {
def get[A](id: Int) = {
val docs: JsValue = ???
Json.fromJson[A](docs)
}
}
您可能想要定义它,以便自动为实际的A
类找到隐式:
trait DAO[A <: Entity] {
def get[A](id: Int)(implicit formatter: JsFormatter[A]) = {
val docs: JsValue = // Use your formatter here instead of ???
Json.fromJson[A](docs)
}
}