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
相关产品推荐
相关产品推荐

