Ely*_*lye 6 collections kotlin
我们知道Kotlin中的List是不可变的,即你不能像下面那样添加和删除.
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
myList!!.add(10)
myList!!.remove(10)
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果我们将它转换为ArrayList,如下所示,添加和删除工作.
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
(myList!! as ArrayList).add(10)
(myList!! as ArrayList).remove(10)
}
}
Run Code Online (Sandbox Code Playgroud)
我只是觉得这很奇怪,因为myList实际上是一个List,它假设是不可变的.铸造它,允许它被改变.
上面做了什么(强制转换为Array并修改内容)是合法的,还是语言需要改进才能禁止?
有几种不同类型的不变性:
这里有一个单独的答案提到了一个.
Readonly - 你不应该改变它(Kotlin的列表),但有些东西可能(强制转换为Mutable,或者从Java改变).
List
只是一个没有变异方法的接口,但如果将其转换为实例,则可以更改该实例MutableList
.
然后有人继续评论Kotlin为了直接使用Java集合而选择只读,因此使用Java集合没有任何开销或转换.
Kotlin List是readonly,而不是一成不变的.其他调用者(例如Java)可能会更改列表.Kotlin调用者可能会列出并更改它.没有不可改变的保护.
原始来源:Kotlin和Immutable Collections?
归档时间: |
|
查看次数: |
742 次 |
最近记录: |