如何解析包含Serializable的推断类型

时间:2016-03-29 19:22:00

标签: scala scala-wartremover

难倒在这一个上。使用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的类型

1 个答案:

答案 0 :(得分:0)

你确定它甚至可以编译(我不知道它是怎么做的)?

case的第一个(例如)match返回 (String, JsNumber),而第四个返回(似乎是)(String, String)。这两种类型中唯一常见的超类型是Serializable,因此,这就是最终的结果。