Kotlin中能否用is操作符配合内联变量声明简化空值检查代码?
Kotlin 简化空值检查与代码的方法
Kotlin 确实没有像 C# 那样直接在 if 条件里完成赋值+空值检查的语法,但可以通过标准库的扩展函数实现类似的简化效果,最常用的就是 let:
简化后的代码
rfid.readTagFromBuffer()?.let { tagInfo -> val msg = hnd.obtainMessage() msg.obj = tagInfo hnd.sendMessage(msg) }
原理说明
?.是安全调用运算符:只有当rfid.readTagFromBuffer()返回非空值时,才会执行后面的let函数;如果返回null,整个表达式直接跳过,不会执行 lambda 里的代码。let函数会把当前非空的对象作为参数传入 lambda 中(这里我们给参数起名tagInfo,也可以直接用默认的it),并且在 lambda 内部,这个参数会被智能转换为非空的UHFTAGInfo类型,不需要再手动判空。
更紧凑的可选写法
如果想进一步压缩代码,还可以结合 apply 简化消息创建逻辑:
rfid.readTagFromBuffer()?.let { tagInfo -> hnd.obtainMessage().apply { obj = tagInfo }.let(hnd::sendMessage) }
内容的提问来源于stack exchange,提问作者Kamil
相关产品推荐
相关产品推荐

