【发布时间】:2020-11-30 10:25:20
【问题描述】:
我有一个关于 Kotlin 集合的一般性问题。
当我们有 val 与 var 的区别时,为什么会有这么多集合的可变版本(例如 MutableList)?
嗯....好吧...实际上,我知道val 与对象的“可变性”无关,而是与对象的“可重新初始化”有关。
但是这就提出了一个问题....为什么MutableList 不是默认值?
【问题讨论】:
-
你读过documentation吗?原因之一是不可变列表是协变的,而可变列表不是。
-
可变集合允许您修改其中的内容。
var允许您为变量分配不同的集合。可变性可用于帮助优化代码,因为它可以避免在您仅更改部分内容时重复复制列表的全部内容。或者您可能需要它进行一些递归操作。仅举几个例子。 -
@Pawel 为什么不创建一个协变的统一接口,但在
add()和remove()等所有修改方法中都强制执行类型检查?所以,如果你尝试非法修改,你会得到null。 -
泛型提供编译时安全性,并且(至少在 JVM 上)可变/不可变变体均由本机集合实现支持。运行时检查(这会带来相当多的开销)是违反设计的,只是提出问题。
标签: kotlin language-design mutablelist