报告最后的 else 分支为点限定或二元表达式一部分的级联 if 表达式。
这可能导致意外行为,因为只有最内层的 if-else 表达式成为外部表达式的接收器或左操作数,这可能与预期逻辑不一致。
示例:
fun printNumberSign(num: Int) {
if (num > 0) {
"positive"
} else if (num < 0) {
"negative"
} else {
"zero"
}.let { print(it) }
}
fun main() {
printNumberSign(1) // 未打印任何内容,因为 'let' 的接收者仅为内层的 'if-else' 表达式
}
应用第一个快速修复(转换为 when)后:
fun printNumberSign(num: Int) {
when {
num > 0 -> {
"positive"
}
num < 0 -> {
"negative"
}
else -> {
"zero"
}
}.let { print(it) }
}
fun main() {
printNumberSign(1) // 打印“positive”
}
或者,第二个快速修复会添加明确的大括号以保持原始语义,同时将嵌套的 else 分支设为显式:
fun printNumberSign(num: Int) {
if (num > 0) {
"positive"
} else {
if (num < 0) {
"negative"
} else {
"zero"
}.let { print(it) }
}
}
fun main() {
printNumberSign(1) // 未打印任何内容,但代码更清晰
}