Any в hashmap kotlin
Есть класс
data class Test(
var fields: HashMap<String, Any>?
) {
constructor(name: String?) : this(
fields = if (name != null ) hashMapOf("IVANOV" to name) else null
)
}
При создании Test("IVAN")
получаю ошибку
Error:(17, 46) Kotlin: Type mismatch: inferred type is kotlin.collections.HashMap<String, String> /* = java.util.HashMap<String, String> */ but kotlin.collections.HashMap<String, Any>? /* = java.util.HashMap<String, Any>? */ was expected
в чем тут проблема?
если проделать такое в вызове обычного метода - все хорошо,но в конструкторе - нет
Ответы (1 шт):
Автор решения: IR42
→ Ссылка
Видимо был баг в компиляторе, в kotlin 1.4 не воспроизводится https://pl.kotl.in/BGpzsGMke
В версиях ниже нужно явно указать типы мапы
fields = if (name != null ) hashMapOf<String, Any>("IVANOV" to name) else null
Иначе она получается HashMap<String, String>, которую нельзя присвоить в HashMap<String, Any> (Инвариантность)