Android Volley Kotlin:(Mutable)Map<(raw) Any?, (raw) Any?>! 与 MutableMap<String, String>

Yun*_*aya 2 android dictionary kotlin android-volley

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

val params = mutableMapOf<String, String>()
params["key1"] = "value1"
params["key2"] = "value2"
val parameter = JSONObject(params)
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

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

Mar*_*een 5

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

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

警告(Mutable)Map<(raw) Any?, (raw) Any?>显示 Java 参数参数 - 声明它可以预期 aMapMutableMap,因为您从 Kotlin 调用 Java 代码 - Java 不知道 是Map可变的还是不可变的。请注意,Kotlin 不支持原始类型,只有在调用 Java 代码时才会遇到此问题。