Почему возможно передача Double, наследника Number, в коллекцию с параметром типа ?
Почему возможно передача Double, наследника Number, в коллекцию с параметром типа <in Number>?
var list:MutableList<in Number> = mutableListOf() list.add(3.0)
Если я правильно понял возможно передать Number и его супертип (т.е. от Number до Any), но Double является наследником?
Ответы (1 шт):
Автор решения: Eugene Krivenja
→ Ссылка
Вы не совсем верно понимаете значение in/out модификатора.
Он в вашем случае определяет тип списка, который вы можете присвоить переменной list.
Сам же метод add() принимает любой Number.
var list: MutableList<in Number> = mutableListOf()
list.add(3.0) // Success
list = mutableListOf<Double>() // Error
val list2: MutableList<in Double> = list // Success
println(list[0] is Double) // true
Вот в list2 теперь, Number не добавить, только Double.