2017-12-15 15 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.

어느 하나가 고장이 어디 말해 줄 수 다음과 같은 오류를 준다? Kotlin 때문입니까? adapter() 방법의 서명을 보면

+1

그것은 Kotlin 때문이 아닙니다. Java에서는'JsonAdapter '('Map '유형에 사용할 수 없습니다)으로 끝납니다. Kotlin은 매개 변수화 인수를 제공해야하므로 실수를 더 빨리 볼 수 있습니다. –

답변

2

, 그것은 인수에서 해당 유형 매개 변수를 추론 할 수 없습니다

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

또는 대안을 :

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

는 따라서 명시 적 유형을 제공해야 :

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

이것은 효과가있었습니다. 나는 링크가 템플릿을 가지고 있지 않았기 때문에 그것을 필요로하지 않을 것이라고 생각했다. –

+1

형식 매개 변수를 명시 적으로 선언하고 암시 적 선언 형식을 유지하면서 첫 번째 구문을 좋아합니다. 또한 적은 코드. –