【问题标题】:Android Volley Kotlin: (Mutable)Map<(raw) Any?, (raw) Any?>! vs MutableMap<String, String>Android Volley Kotlin: (Mutable)Map<(raw) Any?, (raw) Any?>! vs MutableMap<String, String>
【发布时间】:2020-09-27 20:31:04
【问题描述】:

在带有 Kotlin 和 Volley 库的 Android 中,我使用以下代码将地图放入 jsonObject。

val params = mutableMapOf<String, String>()
params["key1"] = "value1"
params["key2"] = "value2"
val parameter = JSONObject(params)

这给了我以下错误:

Java type mismatch expected (Mutable)Map<(raw) Any?, (raw) Any?>! but found MutableMap<String, String>. Use explicit cast
  1. 为什么我需要显式转换为params as Map&lt;*, *&gt;
  2. 什么是(可变)映射?
  3. (Mutable)Map 和 MutableMap 有什么区别?

【问题讨论】:

    标签: android dictionary kotlin android-volley


    【解决方案1】:

    JSONObject 构造函数采用带有原始类型的Map(未指定泛型)。因此,您应该提供一个可以是 Any 类型的地图:

    val params = mutableMapOf<Any?, Any?>()
        params["key1"] = "value1"
        params["key2"] = "value2"
        val parameter = JSONObject(params)
    

    警告 (Mutable)Map&lt;(raw) Any?, (raw) Any?&gt; 显示 Java 参数参数 - 说明它可以预期 MapMutableMap,因为您正在从 Kotlin 调用 Java 代码 - Java 不知道 Map 是否可变或不可变。需要注意的是,Kotlin 不支持原始类型,只有在调用 Java 代码时才会遇到这个问题。

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多