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

时间:2018-10-22 22:16:28

标签: kotlin kotlin-null-safety

我写了如下所示的逻辑

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

当变量""的值为value时,它将返回null吗?

2 个答案:

答案 0 :(得分:1)

else会抓住它,您也可以直接在null块中检查when

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

答案 1 :(得分:1)

是的,会的。

或者至少在您修复语法错误后……(该函数定义为返回String,但不返回任何内容。要解决此问题,请在{{之前添加return 1}} —或使其成为表达式主体,用when替换前一个{并删除后一个=。对于短函数,后一种情况更简单,尤其是可以删除返回类型也是如此;但是它不太适合较长的返回类型。)

最简单的检查方法当然是自己运行!但是,是的,在修复语法后,如果使用}调用,它将确实返回一个空字符串。

这是怎么回事,如果LHS为null?.(安全呼叫)操作员将绕过对toUpperCase()的呼叫,并将null直接传递给null。而且由于when不等于null"A",所以它落入了"B"分支,该分支给出了空字符串。

其他答案指出,您当然可以显式检查else。但是Kotlin为您提供了几种更简洁地处理null的工具(例如此处的安全调用运算符),因此您通常不需要这样做。