【问题标题】:Converting a HashMap using moshi使用 moshi 转换 HashMap
【发布时间】:2017-12-15 19:37:46
【问题描述】:

我正在尝试将 HashMap 的元素转换为 JSON 字符串。我正在使用link 中使用的方法。

 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) 类型推断失败:没有足够的信息来推断 有趣的适配器中的参数 T(p0:类型!):JsonAdapter! 请明确说明。

谁能告诉我错在哪里?是因为 Kotlin 吗?

【问题讨论】:

  • 值得注意的是,这并不完全是因为 Kotlin。在 Java 中,您最终会得到 JsonAdapter&lt;Object&gt;(不能将它用于您的 Map&lt;String, Element&gt; 类型)。 Kotlin 强制您提供参数化参数,以便您更快地发现错误。

标签: android kotlin moshi


【解决方案1】:

查看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)

【讨论】:

  • 这确实有效。我想既然链接没有模板,它就不需要它们了。
  • 我喜欢第一个,显式声明类型参数并保持隐式声明类型。而且,代码更少。
猜你喜欢
  • 2017-01-25
  • 2020-10-31
  • 2016-09-16
  • 2021-12-30
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多