MutableList<out X>
- это список, который содержит элементы определенного типа, которые являются подклассом X. Приведя его к MutableList<X>
, вы также разрешаете добавлять другие элементы в этот список, которые также имеют тип X но не того же самого подкласса. Например:
class StringHolder {
val strings = ArrayList<String>()
val list: MutableList<out Any> = strings
fun process() {
for (s in strings) {
s.length
}
}
}
fun hack(holder: StringHolder) {
val list = holder.list as MutableList<Any>
list.add(1)
holder.process() // fails with ClassCastException casting Int to String
}