2
Play Framework提供了一種通過隱式Writes
將對象轉換爲JSON的方法。檢查是否存在隱式匹配情況
def toJson[T](o: T)(implicit tjs: Writes[T]): JsValue
我有一個部分函數正在處理消息,其中一些可能可串行化爲JSON(如果存在一個Writes)。我如何編寫一個與隱式Writes存在的對象匹配的案例?
override def receive = {
case obj:/*(T where there exists an implicit Writes[T])*/ =>
return Json.toJson(obj)
case other =>
return Json.obj("unknown" -> other.toString)
}
基本上我想是的
case obj:ClassA =>
return Json.toJson(obj)
case obj:ClassB =>
return Json.toJson(obj)
case obj:ClassC =>
return Json.toJson(obj)
// ... repeat 20 times for all the classes where I know I have a Writes
一個較短的版本我試圖使像接受一個隱含的unapply
,但我不能讓的情況下接受,沒有一個語法錯誤。
Implicits是一個編譯時的功能,所以即使在運行時行爲的對象匹配他們沒有多大意義。你所需要做的就是要求該方法爲「T」提供一個隱含的證據。如果它沒有找到,編譯器會在編譯時告訴你。 –
問題是我匹配的對象是Any,而我有20多個隱式Writes。我想爲「一個隱式Writes存在的類之一的對象」寫一個案例。這應該是在編譯時可能的,對吧?這只是枚舉自己的20多個類型的較短版本 – takteek
[Test if implicit conversion is available](https://stackoverflow.com/questions/5717868/test-if-implicit-conversion-is-available) –