這並不編譯: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