难倒在这一个上。使用PlayJSON及其JsObject。
Wart remover用胡萝卜(^)标记map
调用,并在该行说明包含Serializable的推断类型。代码功能正常且有效,但想知道为什么工具会标记这个以及如何删除此错误。
def getPrintVersionOfJsonObj(jsObj: JsObject): JsObject = {
val fieldValueMap: Seq[(String,JsValue)] = jsObj.fields.map {
case (fieldName, fieldValue: JsNumber) => (fieldName, fieldValue)
case (fieldName, fieldValue: JsBoolean) => (fieldName, fieldValue)
case (fieldName, fieldValue: JsString) => (fieldName, fieldValue)
case (fieldName, fieldValue: JsArray) => (fieldName, convertJsArrayToPrettyString(fieldValue))
case (fieldName, fieldValue: JsObject) => (fieldName, getPrintVersionOfJsonObj(fieldValue))
case (fieldName, fieldValue: JsValue) => (fieldName, JsString(Json.prettyPrint(fieldValue)))
}
JsObject(fieldValueMap)
}
JSObject.fields是scala.collection.Seq[scala.Tuple2[scala.Predef.String, play.api.libs.json.JsValue]]
我觉得令人困惑的是你知道那个val fieldValueMap
的返回类型,你知道jsObj.fields
的类型
答案 0 :(得分:0)
你确定它甚至可以编译(我不知道它是怎么做的)?
case
的第一个(例如)match
返回
(String, JsNumber)
,而第四个返回(似乎是)(String, String)
。这两种类型中唯一常见的超类型是Serializable
,因此,这就是最终的结果。