kotlin 中的名称阴影

rez*_*a72 6 kotlin

最近,我在 IntelliJ Idea 中遇到了这个警告。但我没有任何解决方案......另外,我不想使用@Suppress("NAME_SHADOWING"). 如果您指导我,我将不胜感激。这是我的代码:

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

Ivo*_*ers 18

名称隐藏意味着您在不同的作用域中使用具有相同名称的变量,这使得您更有可能意外引用错误的变量。解决方案是将它们重命名为不同的名称。在你的情况下,它是变量id。它既是函数的参数,也是在第一个之后定义的let。例如,您可以这样做来删除警告:

fun add(
    @Parameter id: Long?
): someClass {
    myTable?.content?.firstOrNull { it.add }?.id?.let { id2 ->
        db.products.readById(id2)?.let { db.products.delete(it) }
    }
    return remove(id)
}
Run Code Online (Sandbox Code Playgroud)

  • `id2` 似乎不具有指示性,因为它位于 `let` 内部,然后 `safeId` 表明它不为空。 (2认同)