Android kotlin Object Любое несоответствие типов - PullRequest
0 голосов
/ 03 июля 2018

Как назначить карту Котлина карте библиотеки Java. Это дает ошибку несоответствия типов для объекта и любого.

Мне нужно назначить переменную java map в сторонней java библиотеке из моей карты кодов kotlin.

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 голосов
/ 03 июля 2018

JavaModel.params требует явно <String, Object>. Вы не можете использовать Kotlin Any там. Также HashMap в Kotlin является картографическим типом, поэтому ваш лучший способ - сделать простой обходной путь:

Расширение HashMap из Java, напр. ParamsMap.java

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

И используйте это так:

val model = JavaModel()

val params = ParamsMap()
params.put("key","value")
model.params = params
0 голосов
/ 03 июля 2018

Единственное, чего я могу добиться - это создать новый класс Java и выполнить операцию внутри него. Я даю параметры Java Map в качестве параметра и выполнил операцию внутри класса Java.

Котлин автоматически ведет себя как любой объект как любой, поэтому он дает несоответствие типов для назначения.

public class ObjectMapper {
    public static void setParam(Map<String, Object> params, String key, String value) {
        params.put(key, value);
    }
}
0 голосов
/ 03 июля 2018

Java Object - это не то же самое, что Any у Котлина, поэтому типы MutableMap<String, Any> и Map<String, Object>? не совпадают, поскольку вы не можете изменить стороннюю библиотеку Java, просто объявите params как:

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