android kotlin中的空指针检查

public void doStudy(Study study) {
        study.readBoos();
        study.doHomeWork();
    }

观察以上代码 可能会出现空指针异常 因为study没有做任何的判空处理

解决办法:

 public void doStudy(Study study) {
        if (study != null) {
            study.readBoos();
            study.doHomeWork();
        }
    }

转为kotlin格式

 fun doStudy(study: Study){
        study.readBoos()
        study.doHomeWork()
    }

这时我们调用这个方法传null肯定是会报错的  不能传空 这时我们要传null该怎么办

现在是可以传null,但是下面的还是有问题的 那就继续修改

现在这段代码是没问题了 但是这样写甚至比java还要繁琐 所以还有肯定还得有其他的写法

判断是否为空的辅助类   简化以上代码 

if (study != null) {
        study.readBoos()
        study.doHomeWork()
    }

 简化后(与上面一样 极大简化了代码 可以直接省略掉if的判断)

 study?.readBoos()
 study?.doHomeWork()

操作符   ?:

类似于三目表达式

看以下代码

val c = if(a != null){
            a    
        }else{
            b
        }

使用操作符简化后

val c = a ?: b

如果a不为空 c = a 否则 c = b

获取text文本的字符个数

fun getTextLenghts(text: String?): Int {
    if (text != null) {
        return text.length
    }
    return 0
}

使用操作符简化

fun getTextLenghts(text: String?): Int {
    return text?.length ?: 0
}

还有一种情况,就是本身已经判断是否为空了,但是kotlin中的空指针检查机制却还是给我们提示了某个地方可能为空,编译不通过 这个时候想强制执行某段代码就要使用 !! 来进行操作,这是一种具有风险的写法,意思就是不在使用kotlin中的空指针检查机制,即使出现了空指针的情况也需要自己处理

小结

?   判空 如果为空不执行以下代码

?:   如果为空执行后面一段代码 不为空执行前面的代码

!!    强制执行某段代码  承担空指针风险

let函数

let函数不是什么操作符也不是什么关键字  它可以作为操作对象放入lambda式中进行操作

let函数可以代替对象进行更安全的操作 如下

stu = study   study已经在执行let函数之前提前判空了 所以let函数里面的stu对象也是不可能为空的

接前面学习的lambda表达式特性  lambda表达式中只有一个参数时可以省略这个参数使用 it 来代替 故修改如下

字符串内嵌

${}

当只有一个参数的时候可以使用 $

举例 当我们要输出某个参数的具体值

一般可以这样

定义变量 : val  a = 10

  Log.d("TAG","a is "+ a)

字符串内嵌写法

   Log.d("TAG","a is ${a}")

其中当大括号中只有一个变量时 可以省略掉大括号

   Log.d("TAG","a is $a")

给参数设置默认值

fun callThisMethod(num: Int, name: String = "土豆") {
    println("num is $num" + "name is $name")
}

 如上图代码所示 给name设置了一个"土豆"的默认值 下面调用一下这个方法

callThisMethod(20)

现在只传递一个num相对应的20 也是不会报错的

出现下面这种情况   

 callThisMethod("20")

就会出现报错的问题  解决办法肯定是有的

指定参数传值

callThisMethod(num = 10, name = "西瓜")

这样就没有问题了  单独传一个num = 20 或者 name = "西瓜"(num设置默认值) 都是可以的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值