при использовании .remove функция изменяемого компилятора списка выдает исключение, какая альтернатива? - PullRequest
0 голосов
/ 07 мая 2020

Это дает исключение в потоке «main»:

java .lang.UnsupportedOperationException: remove

fun main(args: Array<String>) {
   val list = listOf(0, 1, 2, 3, 4, 5, 6, 7, 8);
   var record: MutableList<Int>;
   record = list as MutableList<Int>;
   record.remove(2);
   print(record);
}

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Приведение не превращает объект в объект другого типа. Когда вы назначаете list record, он по-прежнему доступен только для чтения List, но вы вынудили компилятор рассматривать его как MutableList, поэтому он завершится ошибкой во время выполнения, а не во время компиляции.

Поскольку вы создаете экземпляр list как доступный только для чтения List, он защищен от изменений (по крайней мере, в отношении своего размера). Если это не то, что вам нужно, вы должны для начала создать его как MutableList. Или, если вам просто нужна его копия, которую вы можете изменить, вы можете использовать toMutableList(), чтобы получить копию.

2 голосов
/ 07 мая 2020

Вы должны использовать .toMutableList () , чтобы скопировать список в новый изменяемый список:

val list = listOf(0, 1, 2, 3, 4, 5, 6, 7, 8)
val record = list.toMutableList()
record.remove(2)
print(record)

Это выводит:

[0, 1, 3, 4, 5, 6, 7, 8]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...