You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何优雅规避Val cannot be reassigned错误?

解决Kotlin遍历列表时「Val cannot be reassigned」错误的最优方式

先明确报错原因:你写的for-in循环里的number、forEach中的it都是只读的局部变量,它们只是原列表元素的副本,不是指向原列表元素的引用,所以直接赋值会触发「Val cannot be reassigned」错误。

下面是几种更优的实现方式:

1. 生成新列表(推荐,符合Kotlin不可变设计理念)

如果不需要修改原列表,而是需要一个处理后的新列表,用map函数最简洁:

val modifiedNumbers = numbers.map { 
    if (it % 2 == 0) it * 2 else it 
}

这种方式完全规避了修改原元素的问题,返回一个全新的列表,更适合大多数场景。

2. 修改原MutableList的简洁写法

如果必须修改原可变列表(MutableList),除了你用的indices遍历,还有两种更简洁的方式:

方式一:forEachIndexed

通过索引和元素值同时遍历,直接修改对应位置的元素:

numbers.forEachIndexed { index, value ->
    if (value % 2 == 0) {
        numbers[index] = value * 2
    }
}

方式二:replaceAll

MutableList自带的replaceAll方法,专门用来批量替换元素,代码更紧凑:

numbers.replaceAll { 
    if (it % 2 == 0) it * 2 else it 
}

内容的提问来源于stack exchange,提问作者deja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:10:28