我们知道 Kotlin 中的列表是不可变的,即您不能像下面那样添加和删除。
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
myList!!.add(10)
myList!!.remove(10)
}
}
但是,如果我们将其转换为 ArrayList,如下所示,则添加和删除工作有效。
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
(myList!! as ArrayList).add(10)
(myList!! as ArrayList).remove(10)
}
}
我只是觉得这很奇怪,因为 myList 实际上是一个列表,它应该是不可变的。并铸造它,允许它被改变。
上面所做的事情(转换为数组并修改内容)是否合法,或者语言需要改进以禁止这样做?
有几种不同类型的不变性:
在一个单独的 SO 答案中提到了一个here https://stackoverflow.com/questions/33727657/kotlin-and-immutable-collections.
只读 - 您不应该更改它(Kotlin 的列表),但某些内容可能(转换为 Mutable,或从 Java 更改)。
List
只是一个没有变异方法的接口,但是如果将其强制转换为,则可以更改实例MutableList
.
然后有人继续评论说,Kotlin 选择只读是为了直接使用 Java 集合,因此在使用 Java 集合时没有开销或转换。
Kotlin List 是只读的,不是不可变的。其他调用者(例如 Java)可能会更改该列表。 Kotlin 调用者可能会投射该列表并更改它。不存在一成不变的保护。
原始来源:Kotlin 和不可变集合? https://stackoverflow.com/questions/33727657/kotlin-and-immutable-collections
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)