,android,dictionary,kotlin,android-volley"/>

首页 > 解决方案 > Android Volley Kotlin: (Mutable)Map<(raw) Any?, (raw) Any?>! 与 MutableMap

问题描述

在带有 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<*, *>
  2. 什么是(可变)映射?
  3. (Mutable)Map 和 MutableMap 有什么区别?

标签: androiddictionarykotlinandroid-volley

解决方案


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

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

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


推荐阅读