takeIf
用于判断指定对象是否满足条件,满足就返回该对象自身,不满足返回null。因为可以返回对象自身,所以可以用作链式调用,以简化代码,又因takeIf
可能返回空,所以常常和let
结合使用,示例如下:
有一个Woman类,如下:
data class Woman(val name: String, val age: Int)
创建一个Woman对象:
val woman: Woman? = Woman("Lily", 21)
然后有个需求是判断一个女性是否达到法定结婚年龄,如果达到了的话就打印一个消息到控制台。示例代码如下:
woman?.takeIf { it.age >= 20 }?.let { println("${it.name}符合法定结婚年龄了") }
在一些条件比较简单的情况下,链式调用一行搞定,比较简洁,对比原始方式需要3行,如下:
if (woman != null && woman.age >= 20) {
println("${woman.name}符合法定结婚年龄了")
}