1

我写了一个如下所示的逻辑

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

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

4

2 回答 2

3

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

when (value?.toUpperCase()) {
  ..
  null -> ""
}
于 2018-10-22T22:24:23.000 回答
1

是的,它会的。

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

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

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

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

于 2018-10-23T14:21:09.787 回答