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 關注
- 835 瀏覽
添加回答
舉報