Kotlin判空处理

867 阅读1分钟

参考了这个大佬文章

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"
}