Kotlin 空安全完整指南:彻底告别NullPointerException

前言

在日常 Kotlin 开发中,大家或多或少都遇到过 NullPointerException。
明明 Kotlin 标榜“空安全”,为什么实际项目里依旧会踩坑?尤其在和 Gson 这类第三方库结合时,经常出现“参数不能为空,却传了 null”的问题。
本文将从 Kotlin 的空安全原理讲起,结合真实开发场景,总结常见坑点与最佳实践,帮你彻底告别 NPE。

为什么要学空安全?

在 Java 中,空指针异常 (NullPointerException, NPE) 是最常见的运行时错误。
Kotlin 的设计目标之一,就是 通过语言层面消除 NPE

所以 Kotlin 引入了 可空类型(nullable)不可空类型(non-nullable) 的概念,让“空”在编译期就能被发现。


一、可空与不可空

在 Kotlin 里,变量必须显式声明是否允许为空:

val a: String = "Hello" // 不可为 null
val b: String? = null   // 可为 null
  • 不可空类型 (String):不能赋值 null,编译时报错
  • 可空类型 (String?):可以为 null,但用的时候必须判空

二、四大空安全操作符

  1. 安全调用(?.
    如果对象为 null,返回 null,不会抛异常:

    val length = b?.length  // b 为 null 时返回 null
    
  2. Elvis 操作符(?:
    提供默认值:

    val length = b?.length ?: 0
    
  3. 非空断言(!!
    强制认为不为 null,如果为 null 就直接 NPE:

    val length = b!!.length
    
  4. let 高阶函数
    仅当对象非空时执行:

    b?.let {
         
         
        println("Length = ${
           
           it.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值