【问题标题】:Android kotlin Object Any type mismatchAndroid kotlin Object Any 类型不匹配
【发布时间】:2018-12-11 10:52:07
【问题描述】:

如何将 kotlin 映射分配给 java 库映射。 这会导致 Object 和 Any 的类型不匹配错误。

我需要从我的 kotlin 代码映射中分配第 3 方 java 库中的 java map 变量。

val model = JavaModel() //from 3rd party java library

val params:MutableMap<String, Any> = HashMap()
params.put("key","value")
model.params = params //gives error below

类型不匹配:推断类型为 MutableMap&lt;String, Any&gt; 但应为 Map&lt;String, Object&gt;?

【问题讨论】:

  • 发布您的代码。
  • 什么是“java库图”?你的代码在哪里?
  • 显示JavaModel 类的代码,尤其是params 字段声明。
  • İt 是编译后的代码,我看不到它。我只能说 JavaModel.params 是 Map

标签: java android kotlin type-mismatch


【解决方案1】:

Java的Object和Kotlin的Any不一样,所以MutableMap&lt;String, Any&gt;Map&lt;String, Object&gt;?的类型不匹配,因为你不能改变第三方java库,只需声明params为:

val params: MutableMap<String, Object> = HashMap()

【讨论】:

  • Kotlin 将显示此类代码的类型不匹配:var param: MutableMap&lt;String, Object?&gt; = hashMapOf(); param.put("key", "")
  • 你是对的 3mpty,那么解决方案是什么?两种解决方案都给出完全相同的错误。
  • 看起来不错,@DiRiNoiD 你应该分享更多关于你的JavaModel的信息
【解决方案2】:

JavaModel.params需要明确的&lt;String, Object&gt;。你不能在那里使用 Kotlin Any。 Kotlin 中的 HashMap 也是映射类型,所以最好的办法是做简单的解决方法:

从 java 扩展 HashMap,例如。 ParamsMap.java:

public class ParamsMap extends HashMap<String, Object> { }

并像这样使用它:

val model = JavaModel()

val params = ParamsMap()
params.put("key","value")
model.params = params

【讨论】:

    【解决方案3】:

    我唯一能做到的就是创建一个新的 Java 类并在其中执行操作。我将 params Java Map 作为参数,并在 Java 类中进行了操作。

    Kotlin 自动将任何 Object 视为 Any,因此它会导致分配的类型不匹配。

    public class ObjectMapper {
        public static void setParam(Map<String, Object> params, String key, String value) {
            params.put(key, value);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多