Kotlin方法的Int类型参数是否可修改?校验通过为何仍下标越界
问题1:Int类型的参数值可以被修改吗?
不可以。
Kotlin中所有函数的参数默认都是只读的val,且Int属于基础值类型,采用值传递的方式传入函数,函数内部仅能读取参数的值,无法修改外部传入的原始变量,不用担心funA内部修改params的值导致后续逻辑异常。
问题2:为什么会出现params为-1进入funB的情况?
核心原因是你funA的实现存在分支返回逻辑缺失:
你当前的funA代码仅在params < 0的分支返回了false,params >= 0的分支没有显式声明返回值:
fun funA(params:Int): Boolean { if (params < 0) { return false } // 此处缺少返回值,属于Kotlin标准编译规则下的编译错误 }
如果由于编译配置放宽、代码漏写return true、重写方法时签名不匹配导致实际执行的不是你写的这个funA实现等异常场景,会出现**params = -1时funA未按预期返回false,反而返回了true**的问题,导致onTrigger里的拦截逻辑if (!funA(params)) return失效,-1的参数直接流入funB,访问数组下标触发越界崩溃。
修复方案
补全funA的返回逻辑即可:
override fun funA(params:Int): Boolean { if (params < 0) { return false } return true }
内容的提问来源于stack exchange,提问作者Joe Blake
相关产品推荐
相关产品推荐

