Kotlin和不可变集合?

我正在学习Kotlin,看起来我可能希望在明年使用它作为我的主要语言。但是,关于Kotlin是否具有不可变集合的研究一直存在矛盾,并且我试图找出是否需要使用Google Guava。

有人可以给我一些指导吗?默认情况下是否使用不可变集合?哪些运算符返回可变或不可变的集合?如果没有,是否有实施这些计划的计划?


回首忆惘然
浏览 732回答 3
3回答

婷婷同学_

List标准库中的Kotlin 是只读的:interface List<out E> : Collection<E> (source)元素的一般有序集合。此接口中的方法仅支持对列表的只读访问;请参见 通过MutableList接口支持读/写访问。参数E-列表中包含的元素的类型。如前所述,还有 MutableListinterface MutableList<E> : List<E>, MutableCollection<E> (source)元素的通用有序集合,支持添加和删除元素。参数E-列表中包含的元素的类型。因此,Kotlin通过其接口强制执行只读行为,而不是像默认Java实现那样在运行时抛出异常。同样,有MutableCollection,MutableIterable,MutableIterator,MutableListIterator,MutableMap,和MutableSet,看到STDLIB文档。

料青山看我应如是

这很令人困惑,但是有三种而不是两种不变性:可变-您应该更改集合(科特琳的MutableList)只读-您不应该更改它(Kotlin的List),但可以更改某些内容(广播到Mutable或从Java更改)不可变-没人可以更改它(番石榴的不可变集合)因此,在情况(2)List中只是一个没有变异方法的接口,但是如果将实例强制转换为,则可以更改实例MutableList。使用番石榴(案例(3)),即使使用演员表或其他线程,您也可以安全地更改任何集合。Kotlin选择为只读以便直接使用Java集合,因此使用Java集合不会产生任何开销或转换。
打开App,查看更多内容
随时随地看视频慕课网APP