2017-12-15 3 views
1

要素のHashMapをJSON文字列に変換しようとしています。私はこのlinkで使用されているメソッドを使用しています。moshiを使用してHashMapを変換する

val elementsNew: HashMap<String, Element> = HashMap(elements) 
val type = Types.newParameterizedType(Map::class.java, String::class.java, Element::class.java) 
var json: String = builder.adapter(type).toJson(elementsNew) 

しかし、これは障害がありますどこいずれかを教えてもらえます、次のエラー

Error:(236, 40) Type inference failed: Not enough information to infer parameter T in fun adapter(p0: Type!): JsonAdapter! Please specify it explicitly.

を与えますか?それはコトリンのためですか?

+1

それはKotlinの正確な理由ではないことに注意する価値があります。 Javaでは、 'JsonAdapter '(あなたの 'Map '型には使用できません)で終了します。 Kotlinはパラメータ化の引数を提供するように強制しますので、間違いを早期に確認できます。 –

答えて

2

adapter()メソッドのシグネチャを見てみると、それは引数からその型パラメータを推測することはできません。

したがって
public <T> JsonAdapter<T> adapter(Type type) 

明示的にタイプを提供する必要があります。

var json = builder.adapter<Map<String, Element>>(type).toJson(elementsNew) 

または代替としては、 :

val adapter: JsonAdapter<Map<String, Element>> = builder.adapter(type) 
var json = adapter.toJson(elementsNew) 
+0

これはうまくいった。私はリンクにはテンプレートがないので、それは必要ではないと思った。 –

+1

私は最初のものが好きです。型パラメータを明示的に宣言し、暗黙の宣言型を保持します。また、少ないコード。 –

関連する問題