假设我们有以下列表:

val list: MutableList<out X> = mutableListOf(...)
val list2 = list as MutableList<X>

结果,我们得到一个警告Unchecked cast: MutableList<out X> to MutableList<X>
为什么在这种情况下此 Actor 表很危险?

最佳答案

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
}

关于kotlin - 为什么将List <out X>强制转换为List <X>是危险的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51188761/

10-10 20:00