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<String, Any>
但应为 Map<String, Object>?
【问题讨论】:
发布您的代码。 什么是“java库图”?你的代码在哪里? 显示JavaModel
类的代码,尤其是params
字段声明。
İt 是编译后的代码,我看不到它。我只能说 JavaModel.params 是 MapJava的Object
和Kotlin的Any
不一样,所以MutableMap<String, Any>
和Map<String, Object>?
的类型不匹配,因为你不能改变第三方java库,只需声明params
为:
val params: MutableMap<String, Object> = HashMap()
【讨论】:
Kotlin 将显示此类代码的类型不匹配:var param: MutableMap<String, Object?> = hashMapOf(); param.put("key", "")
你是对的 3mpty,那么解决方案是什么?两种解决方案都给出完全相同的错误。
看起来不错,@DiRiNoiD 你应该分享更多关于你的JavaModel
的信息【参考方案2】:
JavaModel.params
需要明确的<String, Object>
。你不能在那里使用 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 类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章