我想知道是否有一种方法可以确保伴随对象具有其所伴随的类的隐式 Json 格式化程序
:
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 类时,它将找不到隐式转换器。有什么想法可以解决这个问题吗?
最佳答案
好吧,如果没有找到隐式,那么您已经遇到了编译器错误,并且没有比这更好的了。但是,如果您在使用格式化程序时遇到困难,因为您正在为每种可能的 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)
}
}
关于scala - 伴生对象中的隐式 val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34048961/