Jak wiemy, lista w Kotlin jest niezmienna, tzn. Nie można dodawać i usuwać, jak poniżej.Kotlin: Modyfikowanie (niezmienna) Lista przez obsadę, czy jest legalna?
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
myList!!.add(10)
myList!!.remove(10)
}
}
Ale jeśli rzucimy go do ArrayList jak poniżej, dodawanie i usuwanie działa.
class TempClass {
var myList: List<Int>? = null
fun doSomething() {
myList = ArrayList<Int>()
(myList!! as ArrayList).add(10)
(myList!! as ArrayList).remove(10)
}
}
Po prostu pomyślałem, że to dziwne, ponieważ myList jest naprawdę listą, która ma być niezmienna. I rzucając, pozwólcie mu się zmienić.
Czy to, co zostało zrobione powyżej (odlewanie do Array i modyfikowanie treści), jest uzasadnione, czy też język musi zostać poprawiony, aby temu zapobiec?
Możliwy duplikat [kolekcji kotlin i trwałych?] (Http://stackoverflow.com/questions/33727657/kotlin-and-immutable-collections) –
Oferowane łącze wyjaśnia, że lista nie jest niezmienna, ale czytelna. Ale "czytelny" nie jest tak naprawdę "przydatny", zważywszy na to, że nadal może być rzutowany, aby zostać zmienionym.Idealnie, "czytelny" nie powinien być zdolny do "czegoś do zapisu". – Elye
Wystarczy rzutować na 'MutableList', super typ' ArrayList' – voddan