如何在Kotlin的when表达式中使用isNullOrEmpty这类检查方法
问题描述
和许多其他编程语言一样,Kotlin提供了isNullOrEmpty这类检查方法,可通过类似myString.isNullOrEmpty()的形式简单校验变量。
是否有办法将这类检查与when表达式结合使用?默认情况下when表达式仅支持匹配明确的字符串,是否可以实现如下写法?
when (myString) { "1" -> print("1") "2" -> print("1") myString.isNullOrEmpty() -> print("null or empty") //This is what I am looking for else -> print("None of them") }
解决方案
你写的示例代码默认无法生效,原因是带参数的when表达式分支值需要和参数类型匹配,isNullOrEmpty()返回的是Boolean类型,和String类型的myString不匹配,自然无法触发对应分支。可以通过两种方式实现你的需求:
方案1:使用无参数的when表达式(最灵活,支持任意复杂判断)
无参数的when每个分支都是独立的Boolean判断,完全支持你要的调用isNullOrEmpty()的写法:
when { myString == "1" || myString == "2" -> print("1") myString.isNullOrEmpty() -> print("null or empty") else -> print("None of them") }
这种写法支持所有自定义判断逻辑,比如后续要加myString.length > 5之类的条件都可以直接添加,扩展性极强。
方案2:带参数的when直接匹配空场景
因为isNullOrEmpty()本质就是判断值为null或者空字符串,你可以直接把这两个值列在分支里,写法更简洁直观:
when (myString) { "1", "2" -> print("1") null, "" -> print("null or empty") else -> print("None of them") }
这种写法适合简单的固定值匹配场景,代码可读性更好。
内容的提问来源于stack exchange,提问作者Fruchtzwerg
相关产品推荐
相关产品推荐

