为了账号安全,请及时绑定邮箱和手机立即绑定

Kotlin和不可变集合?

Kotlin和不可变集合?

回首忆惘然 2019-11-19 15:02:05
我正在学习Kotlin,看起来我可能希望在明年使用它作为我的主要语言。但是,关于Kotlin是否具有不可变集合的研究一直存在矛盾,并且我试图找出是否需要使用Google Guava。有人可以给我一些指导吗?默认情况下是否使用不可变集合?哪些运算符返回可变或不可变的集合?如果没有,是否有实施这些计划的计划?
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

List标准库中的Kotlin 是只读的:


interface List<out E> : Collection<E> (source)

元素的一般有序集合。此接口中的方法仅支持对列表的只读访问;请参见 通过MutableList接口支持读/写访问。


参数

E-列表中包含的元素的类型。


如前所述,还有 MutableList


interface MutableList<E> : List<E>, MutableCollection<E> (source)

元素的通用有序集合,支持添加和删除元素。


参数

E-列表中包含的元素的类型。


因此,Kotlin通过其接口强制执行只读行为,而不是像默认Java实现那样在运行时抛出异常。


同样,有MutableCollection,MutableIterable,MutableIterator,MutableListIterator,MutableMap,和MutableSet,看到STDLIB文档。


查看完整回答
反对 回复 2019-11-19
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

这很令人困惑,但是有三种而不是两种不变性:

  1. 可变-您应该更改集合(科特琳的MutableList

  2. 只读-您不应该更改它(Kotlin的List),但可以更改某些内容(广播到Mutable或从Java更改)

  3. 不可变-没人可以更改它(番石榴的不可变集合)

因此,在情况(2)List中只是一个没有变异方法的接口,但是如果将实例强制转换为,则可以更改实例MutableList

使用番石榴(案例(3)),即使使用演员表或其他线程,您也可以安全地更改任何集合。

Kotlin选择为只读以便直接使用Java集合,因此使用Java集合不会产生任何开销或转换。


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 772 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信