这并不编译:Playframeworks json写入隐式需要显式类型,为什么?
package model
import play.api.libs.json._
case class Dog(id: Long, name: String, kind: String) {
def asJson() = Json.toJson(this)
}
object Dog {
implicit val writes = Json.writes[Dog]
}
错误:
53. Waiting for source changes... (press enter to interrupt)
[info] Compiling 1 Scala source to /Users/pablo/projects/mvp/target/scala-2.10/classes...
[error] /Users/pablo/projects/mvp/app/models/model2.scala:7: No Json deserializer found for type model.Dog. Try to implement an implicit Writes or Format for this type.
[error] def asJson() = Json.toJson(this)
[error] ^
[error] one error found
[error] (compile:compile) Compilation failed
更改伴侣对象(注意明确的类型):
object Dog {
implicit val writes: Writes[Dog] = Json.writes[Dog]
}
修复该问题。这是为什么?
请注意,'Json.writes'签名是'def writes [A]:写入[A]',因此类型完全是明确的。 –
我对scala没有足够的了解来回答这个问题,但它可能很重要['Writes [-A]'](http://www.playframework.com/documentation/2.3.x/api/scala/index。 html#play.api.libs.json.Writes)是逆变的。我不知道斯卡拉是否可以处理这种情况下的暗示。 – Carsten