我写了如下所示的逻辑
fun snippet(value: String?): String {
when (value?.toUpperCase()) {
"A" -> "A"
"B" -> "B"
else -> ""
}
}
当变量""
的值为value
时,它将返回null
吗?
答案 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的工具(例如此处的安全调用运算符),因此您通常不需要这样做。