【问题标题】:when used .remove function of mutable List compiler throws exception any alternative?当使用可变列表编译器的 .remove 函数抛出异常时,还有什么选择吗?
【发布时间】:2020-08-22 21:41:39
【问题描述】:

这会在线程“main”中产生异常:

java.lang.UnsupportedOperationException: 删除

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);
}

【问题讨论】:

  • ListMutableList 之间存在差异。此外,这不是 Java。分号不是必需的。

标签: kotlin exception mutablelist


【解决方案1】:

您应该使用.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]

【讨论】:

  • 澄清一下,它将原始列表复制到一个新的可变列表中。使用record 的操作不会影响list
【解决方案2】:

铸造不会将一个对象变成另一种对象。当您将list 分配给record 时,它仍然是只读的List,但是您已经强制编译器将其视为MutableList,因此它将在运行时而不是编译时失败。

由于您将list 实例化为只读List,因此可以防止更改(至少对其大小)。如果这不是您想要的,您应该首先将其实例化为MutableList。或者,如果您只需要一份可以更改的副本,您可以使用toMutableList() 获取一份副本。

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多