2017-12-15 4 views
1

Ich versuche, eine HashMap von Elementen in eine JSON-Zeichenfolge zu konvertieren. Ich verwende die Methode, die in diesem link verwendet wird.Umwandlung einer HashMap mit Hilfe von Moshi

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) 

Aber das gibt den folgenden Fehler

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

Kann jemand mir sagen, wo ist der Fehler? Liegt es an Kotlin?

+1

erwähnenswert, dass es nicht genau wegen Kotlin ist. In Java würden Sie mit 'JsonAdapter ' (wäre nicht in der Lage, das für Ihre 'Map ' Typ) zu verwenden. Kotlin zwingt Sie, die Parameter für die Parametrisierung anzugeben, damit Sie den Fehler früher sehen können. –

Antwort

2

bei der Unterzeichnung des Verfahrens adapter() sucht, kann es nicht sein Typ Parameter aus dem Argument ableiten:

public <T> JsonAdapter<T> adapter(Type type) 

Daher müssen Sie ausdrücklich auf die Art bieten:

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

oder alternativ :

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

Das hat funktioniert. Ich dachte, da der Link keine Vorlagen hat, wird er sie nicht brauchen. –

+1

Ich mag die erste, die Typparameter explizit deklarieren und den impliziten Deklarationstyp beibehalten. auch weniger Code. –

Verwandte Themen