6
我正在使用Play框架2.1和Scala 2.10.1,並且想構建一個通用函數來構造一個JsArray列表的自定義案例類。斯卡拉類型推遲
private def buildJsArray[T](l: List[T])(result: JsArray): JsArray = {
l match {
case List() => result
case x::xs => buildJsArray(xs)(result :+ Json.toJson(x)) // compiling error here!
}
}
用法:
val applyJsonArray = buildJsArray(List[Apple])(new JsArray())
然而,編譯錯誤被拋出:
No Json deserializer found for type T. Try to implement an implicit Writes or Format for this type.
我確實有特殊情況類寫一個JSON解串器(即蘋果案例課)。
如何推遲編譯器在運行時而不是編譯時檢查x的類型?
非常感謝!
完美的答案,沒有什麼要補充:) –
當JsObject(S)打交道時,你不能使用你的隱式通用OFormat類型。你需要爲OWrites和Reads做一個隱含的操作 – JMess