如何在 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()
的调用,直接传递null
到 when
。由于 null
不等于 "A"
或 "B"
,它落入 else
分支,给出空字符串。
正如另一个答案指出的那样,您当然可以明确检查 null
。但是 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
.
如果LHS是null
,?.
(安全调用)运算符会绕过对toUpperCase()
的调用,直接传递null
到 when
。由于 null
不等于 "A"
或 "B"
,它落入 else
分支,给出空字符串。
正如另一个答案指出的那样,您当然可以明确检查 null
。但是 Kotlin 为您提供了几种更简洁地处理空值的工具(例如这里的安全调用运算符),因此您通常不需要。