AndroidKotlin对象任何类型不匹配

cl25kdpy  于 2022-12-21  发布在  Android
关注(0)|答案(3)|浏览(166)

如何将kotlinMap分配给java库Map。这会导致Object和Any的类型不匹配错误。
我需要从我的kotlin代码Map表中分配第三方java库中的javaMap变量。

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>?

kokeuurv

kokeuurv1#

Java的Object与Kotlin的Any不同,因此类型MutableMap<String, Any>Map<String, Object>?不匹配,因为您无法更改第三方Java库,只需将params声明为:

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

d7v8vwbk2#

JavaModel.params明确要求<String, Object>。您不能在此处使用KotlinAny。此外,Kotlin中的HashMap是Map类型,因此您最好执行简单的解决方法:
从java扩展HashMap,例如ParamsMap.java

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

并像这样使用它:

val model = JavaModel()

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

qnzebej03#

我唯一能做到的就是创建一个新的Java类,然后在类中进行操作,我给予params,Java Map,作为参数,然后在类中进行操作。
Kotlin会自动将任何Object作为Any,因此它会为赋值指定类型不匹配。

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

相关问题