Kotlin!!操作符的安全替代方案

Kotlin 里的!!操作符,刚接触的时候觉得挺方便,直接告诉编译器“我这值绝对不为 null”,看着爽,用多了可就埋雷了。运行时爆个NullPointerException,真够你喝一壶的。

比较靠谱的做法是别乱用!!,靠 Kotlin 本身那套空安全机制就挺香的。像用val声明变量,值一开始就赋好,不用担心它突然变null。简单又放心:

val someValue: String = "Some value"

要是你遇到要晚点初始化的场景,比如Activity里等onCreate()才初始化,那就用lateinit。不过它只支持引用类型,基本类型想这么玩还得用Delegates.notNull()

private var number: Int by Delegates.notNull()

还有个更灵活的做法,用let搭配安全调用?.。像下面这样写,变量非空才会继续走逻辑,少了不少判断代码:

url?.let {
  doSomethingWith(it)
}

多个参数都要非空才干活?写个小函数组合一下逻辑就清爽多了,比如这样上传头像的场景:

fun uploadIfReady(username: String?, photoUrl: String?) {
  if (username != null && photoUrl != null) {
    uploadPhoto(username, photoUrl)
  }
}

还有alsoapply这些扩展函数,配合用起来挺顺的,代码更精简,逻辑更清晰。尤其做一些链式调用或中间调试时有用。

别太依赖!!,工具用得多了容易麻痹,还是把逻辑写清楚些更稳。如果你还在频繁地!!,可以看看这篇文章,里面讲得还蛮系统的。

pdf 文件大小:70.64KB