Kotlin 使用空判断?.与?: 同时处理空与非空时逻辑

时间:2025-02-08 13:19:34

最近使用kotlin重构项目,遇到了一个小问题!

在Java中,可能会遇到判断某个对象是否为空,为空执行一段逻辑,不为空执行另外一段逻辑。查了下很多博客好像都是只对不为空处理做讲解,没有同时把为空处理的方法写出来

 

Java 代码如下:


if (person!=null) {
  num ++;
  ("have person");
  ...    
} else {
  num = 0;
}

使用kotlin 重构这段代码时,是有 ?.  以及 ?: 两个操作符可以简化空操作。

简单说下 ?. 是对象 不为 null 时执行代码,?: 是对象 为 null 执行代码  ; 具体这两个的详细介绍可以参考其他博客,这里直接省略了。

 

于是我试着使用kotlin 修改这段代码,原本以为可以这样写,发现会报错,  因为 ?: 不能跟赋值语句。

 person?.let { 
       println("have person")
       ...
       num++
 } ?: num =0    // 报错!! ?:后不能直接使用赋值语句

这里可以使用 ?: let {  } 写法

 person?.let { 
       //不为空执行
       println("have person")
       ...
       num++
 } ?: let {
       //为空时执行
       num = 0
 }

 若目的仅仅只是在最后结果改变某个变量的值,可以例用let在最后会返回结果的特性,上面还可以继续修改为如下:

num = person?.let {
            println("have person")
            ...
            num++
        } ?: 0