Почему возможно передача 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.

→ Ссылка