首页 > 解决方案 > 为什么我可以在 Kotlin 中将 MutableList 实例化为 val(并向其中添加元素)?

问题描述

我刚刚处于学习 Kotlin 的早期阶段,所以我播放了一个视频,展示了许多常见的 Kotlin 习语:Kotlin 教程

就在视频中的 1:03:10 点,演示者讨论了可变和不可变集合。正如您在视频中看到的那样,他使用 var 关键字创建了一个 MutableList,并使用 val 关键字创建了一个不可变的 List。我很想知道如果我尝试将 val 与 MutableList 一起使用会发生什么错误;我认为这是不允许的,IDEA 会显示一条消息,但它没有给我任何错误消息。然后我向 MutableList 添加了一个元素,这也没有导致错误!当我显示 MutableList 的最后一个元素时,它显示了我添加的元素,因此它不仅没有给我一个错误,它还成功地将一个元素添加到我认为不可变的东西中。

为什么我的代码有效?我不敢相信像我这样的 Kotlin 初学者在 Kotlin 中发现了一个基本错误,所以肯定有其他事情发生。有人可以解释吗?

这是我的代码:

val list3: MutableList<Int> = mutableListOf(6,7,8) 
list3.add(5)
println("list3 last item: ${list3.last()}")

println() 语句显示:

list3 last item: 5

标签: kotlin

解决方案


val仅意味着不能重新分配变量本身。它没有说明该变量中的对象是否可变。

如果你试图这样做,你会得到一个错误

 val list3: MutableList<Int> = mutableListOf(6,7,8)
 list3 = mutableListOf(1,2,3)   // cannot re-assign to val

推荐阅读