更新
我没有测试过这个,但后来意识到逻辑是颠倒的:)
所以你想在它不是 null 或 Empty 时返回 null (这听起来令人困惑)但这是因为如果它是 null 或空你想返回确切的字符串(源),所以 when 语句匹配(记住你正在比较字符串)因此它进入“为空或为空”分支。
这是一个更新的版本:
fun CharSequence?.nullOrEmpty(): CharSequence? =
if (isNullOrBlank().not()) null else this
有点混乱,所以你必须找到一个更好的名字:)
或者,您可以制作一个常规功能,例如:
fun nullOrEmpty(source: String?): String? =
if (source.isNullOrEmpty().not()) null else source
然后这样称呼它:
when (source) {
"1" -> print("1")
"2" -> print("2")
nullOrEmpty(source) -> print("It's null or empty")
else -> print("none")
}
再次,命名应该改进(祝你好运,命名很难!):)
也考虑一下isNullOrBlank(),因为那样会阻止类似的字符串" ",而空只检查length == 0
旧答案。
瓦迪克的回答是正确的;如果你想要一个“功能”,你可以扩展一个:
fun irrelevant(source: String?) {
when (source) {
"1" -> print("1")
"2" -> print("1")
source.nullOrEmpty() -> print("null or empty")
else -> print("none")
}
}
fun CharSequence?.nullOrEmpty(): CharSequence? = if (isNullOrEmpty()) null else this