2016-03-29 8 views
0

この問題を解決しました。 PlayJSONとそのJsObjectを操作する。Serializableを含む推論型を解決する方法

ワートリムーバーは、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は私が混乱を見つけることは、あなたがそのヴァルfieldValueMapのための戻り値の型を知っていたあるscala.collection.Seq[scala.Tuple2[scala.Predef.String, play.api.libs.json.JsValue]]

であり、あなたはそれでもコンパイル(Iドンてください。あなたは

答えて

0

jsObj.fieldsの種類を知っていますそれがどうすれば参照してください)?あなたのmatch

最初の(例えば)case、4分の1は(String, String)(ように思える)を返しながら、 (String, JsNumber)を返します。これらの2つのタイプの唯一の一般的なスーパータイプはSerializableです。だから、それが終わるのです。

+0

4番目の値は '' '(String、JsString)' ''を返し、JsStringは '' 'caseクラスJsString(value:String)extends JsValue''' – Barry

+0

その場合、wartremoverは間違っています(次の行'JsValue'も返す)。コードは実際にコンパイルされますか? – Dima

+0

yeaはコンパイルし、意図したとおりに動作し、プロジェクトに疣贅リムーバーを追加し、問題を解決しようとしていました – Barry

関連する問題