Android kotlin Object Any 类型不匹配

Posted

技术标签:

【中文标题】Android kotlin Object Any 类型不匹配【英文标题】:Android kotlin Object Any type mismatch 【发布时间】: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 【参考方案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);
    

【讨论】:

以上是关于Android kotlin Object Any 类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin基础 Any和Any?

Kotlin的Any 和Java的Object对比

Kotlin的Any 和Java的Object对比

Kotlin中继承类型转换Any超类object关键字详解

Kotlin中继承类型转换Any超类object关键字详解

Kotlin 继承