参考了这个大佬文章
1 多个对象判空
/**
* 参数都不为空, 返回true, 并执行block()
*
* 任意一个为空null则返回false, 并打印所有参数
*/
fun allNotNull(vararg args: Any?, block:()->Any?): Boolean {
for(i in args.indices){
if(args[i].isNullThen {
for(j in args.indices){
println(" 参数$j: ${args[j]}")
}
})return false
}
block()
return true
}
用法
allNotNull("A", Date(), null, "C") {
println("不会打印, 因为有个参数为null")
}
allNotNull("D", "E", "F", "G") {
println("会打印, 因为所有参数不为null")
}
2 单个对象为空则干点啥
/**
* 接受者对象为空则返回true, 并执行 function().
*
* 接受者对象不为空则直接返回false
*/
fun <T>T?.isNullThen(function: () -> Unit): Boolean {
if(this == null){
function()
return true
}
return false
}
用法
var c:String? = getStringFromSomeWhere()
c.isNullThen {
//为空则干点啥, 比如打印一下
println("c is null")
//再比如, 赋个值
c = "default value"
}