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文档。
TA贡献1772条经验 获得超8个赞
这很令人困惑,但是有三种而不是两种不变性:
可变-您应该更改集合(科特琳的
MutableList
)只读-您不应该更改它(Kotlin的
List
),但可以更改某些内容(广播到Mutable或从Java更改)不可变-没人可以更改它(番石榴的不可变集合)
因此,在情况(2)List
中只是一个没有变异方法的接口,但是如果将实例强制转换为,则可以更改实例MutableList
。
使用番石榴(案例(3)),即使使用演员表或其他线程,您也可以安全地更改任何集合。
Kotlin选择为只读以便直接使用Java集合,因此使用Java集合不会产生任何开销或转换。
- 3 回答
- 0 关注
- 772 浏览
添加回答
举报