如何在 kotlin 的 when 分支中使用 null 安全运算符?

How to use null safety operator within a when branch in kotlin?

我写了一个逻辑如下图

fun snippet(value: String?): String {
    when (value?.toUpperCase()) {
        "A" -> "A"
        "B" -> "B"
        else -> ""
    }
}

当变量value的值为null时,会return""吗?

else 会捕捉到它,您也可以直接在 when 块中检查 null

when (value?.toUpperCase()) {
  ..
  null -> ""
}

是的,会的。

或者至少,一旦你修复了语法错误,它就会……(该函数被定义为 return 一个字符串,但没有 return 任何东西。要解决这个问题,要么在 when 之前添加 return — 或者使其成为表达式主体,将第一个 { 替换为 = 并删除最后一个 }。后一种情况更简单对于短函数,尤其是因为您也可以删除 return 类型;但它不太适合较长的函数。)

最简单的检查方法当然是运行自己检查!但是,是的,在修复语法后,如果使用 null.

调用,它确实会 return 一个空字符串

如果LHS是null?.(安全调用)运算符会绕过对toUpperCase()的调用,直接传递nullwhen。由于 null 不等于 "A""B",它落入 else 分支,给出空字符串。

正如另一个答案指出的那样,您当然可以明确检查 null 。但是 Kotlin 为您提供了几种更简洁地处理空值的工具(例如这里的安全调用运算符),因此您通常不需要。