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

Kotlin出现Name Shadowing警告 不想用@Suppress该如何解决?

问题根因

你遇到的Name Shadowing警告是因为外层函数入参命名为id,第一个let块的lambda参数又被你显式命名为id,内层作用域的id会覆盖外层同名参数,编译器因此抛出警告。

解决方案(无需添加屏蔽注解)

下面是两种可行的修改方式:

方案1:修改lambda参数的命名,避免和外层参数重名

你可以把let里的参数改为和外层id不冲突的名称,比如existId、recordId等,示例代码如下:

fun add(
    @Parameter id: Long?
): someClass {
    myTable?.content?.firstOrNull { it.add }?.id?.let { existId ->
        db.products.readById(existId)?.let { db.products.delete(it) }
    }
    return remove(id)
}

方案2:省略lambda参数声明,直接使用默认参数it

Kotlin的单参数lambda默认会提供it作为参数名,你不需要显式声明参数,自然就不会出现重名冲突,示例代码如下:

fun add(
    @Parameter id: Long?
): someClass {
    myTable?.content?.firstOrNull { it.add }?.id?.let { 
        db.products.readById(it)?.let { product -> db.products.delete(product) }
    }
    return remove(id)
}

注:这里内层的let也显式把参数命名为product避免和外层it冲突,你可以根据自己的代码习惯选择是否命名。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:06