Как определить предполагаемый тип, содержащий Serializable
Остановился на этом. Работа с PlayJSON и их JsObject.
Для удаления бородавок маркировка map
вызвать с морковкой (^) и сказать в этой строке Inferred тип, содержащий 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 ответ
Вы уверены, что это даже компилируется (я не вижу, как, если это делает)?
Первый (например) case
вашей match
, возвращает (String, JsNumber)
в то время как четвертый возвращается (что кажется) (String, String)
, Единственный общий супер тип этих двух типов Serializable
Итак, вот что это значит.