如何修改Kotlin函数的入参值,且不需要使用额外变量?
问题解答
你给出的代码无法通过编译:Kotlin 中函数的所有形参默认都是只读的val类型,禁止在函数体内直接重新赋值。
如果要在不新增额外变量的前提下实现修改参数对应的值的需求,有以下两种常用方案:
方案1:使用可变包装类包裹参数
如果需要保留通过形参修改外部原值的引用语义,可以用自定义可变包装类或者JDK自带的AtomicInteger等可变性容器包裹原始值,不需要新增额外临时变量:
// 自定义简单可变Int包装 class MutableInt(var value: Int) fun doSomething(a: MutableInt) { a.value = 23 } // 调用示例 fun main() { val num = MutableInt(10) doSomething(num) println(num.value) // 输出23 }
方案2:直接返回修改后的值
如果不需要保留引用传递的语义,更推荐直接让函数返回修改后的值,调用时直接覆盖原值即可,全程不需要额外变量:
fun doSomething(a: Int): Int { // 这里可以写基于a的修改逻辑,示例直接赋值为23 return 23 } // 调用示例 fun main() { var num = 10 num = doSomething(num) println(num) // 输出23 }
注意:不推荐使用反射等手段强制修改只读形参的值,会破坏Kotlin的内存安全约定,极易出现不可预期的运行异常。
内容的提问来源于stack exchange,提问作者Sasha Arutyunyan
相关产品推荐
相关产品推荐

