Android Kotlin对象任何类型不匹配

时间:2018-07-03 07:50:35

标签: java android kotlin type-mismatch

如何将kotlin映射分配给Java库映射。 这样会导致“对象”和“任意”的类型不匹配错误。

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

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

Kotlin会自动将任何对象表现为任何对象,因此会导致分配类型不匹配。

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