如何将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>?
答案 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);
}
}