3 回答

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
List標(biāo)準(zhǔn)庫中的Kotlin 是只讀的:
interface List<out E> : Collection<E> (source)
元素的一般有序集合。此接口中的方法僅支持對(duì)列表的只讀訪問;請(qǐng)參見 通過MutableList接口支持讀/寫訪問。
參數(shù)
E-列表中包含的元素的類型。
如前所述,還有 MutableList
interface MutableList<E> : List<E>, MutableCollection<E> (source)
元素的通用有序集合,支持添加和刪除元素。
參數(shù)
E-列表中包含的元素的類型。
因此,Kotlin通過其接口強(qiáng)制執(zhí)行只讀行為,而不是像默認(rèn)Java實(shí)現(xiàn)那樣在運(yùn)行時(shí)拋出異常。
同樣,有MutableCollection,MutableIterable,MutableIterator,MutableListIterator,MutableMap,和MutableSet,看到STDLIB文檔。

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
這很令人困惑,但是有三種而不是兩種不變性:
可變-您應(yīng)該更改集合(科特琳的
MutableList
)只讀-您不應(yīng)該更改它(Kotlin的
List
),但可以更改某些內(nèi)容(廣播到Mutable或從Java更改)不可變-沒人可以更改它(番石榴的不可變集合)
因此,在情況(2)List
中只是一個(gè)沒有變異方法的接口,但是如果將實(shí)例強(qiáng)制轉(zhuǎn)換為,則可以更改實(shí)例MutableList
。
使用番石榴(案例(3)),即使使用演員表或其他線程,您也可以安全地更改任何集合。
Kotlin選擇為只讀以便直接使用Java集合,因此使用Java集合不會(huì)產(chǎn)生任何開銷或轉(zhuǎn)換。
- 3 回答
- 0 關(guān)注
- 831 瀏覽
添加回答
舉報(bào)