null 判断 → Kotlin 可空类型

null 判断 → Kotlin 可空类型

老写法(Java)

java 复制代码
// 防御式 null 检查
if (text != null) {
    int length = text.length();
}

// 链式调用 --- 层层判空
if (user != null && user.getAddress() != null) {
    String city = user.getAddress().getCity();
}

// @Nullable 注解 --- 只有提示作用,不强制
public @Nullable String getNickname() { ... }

新写法(Kotlin)

kotlin 复制代码
// 安全调用 --- ?. 如果左边为 null 直接返回 null
val length = text?.length

// 链式安全调用
val city = user?.address?.city

// Elvis 操作符 --- 左边为 null 时取右边默认值
val name = user?.name ?: "未命名"

// 确定不为 null 时强制调用 --- !!(不建议)
val length = text!!.length  // 如果 text 为 null 直接 NPE

一句话注意

Kotlin 的类型系统在编译期强制区分 String(不可为 null)和 String?(可为 null)。String? 类型不能直接传给需要 String 的方法,必须先做 null 检查。这比 Java 的 @Nullable 注解强一万倍------后者只是一个 decorator,IDE 标黄但不影响编译。

!! 操作符是"我知道这个不是 null,别管了",但如果你判断错了,崩的是 KotlinNullPointerException。代码审查里看到 !! 应该本能地警觉,绝大多数情况应该用 ?. 或 ?: 替代。


Java Android 老项目迁移系列,持续更新中。

相关推荐
Nerd(BUG版)1 小时前
KMP学习day4--Kotlin空安全与泛型
学习·安全·kotlin
金銀銅鐵2 小时前
一个 Java 文件实现《孫子兵法·始計篇》中英对照阅读器
java·后端·ai编程
DevOpenClub2 小时前
高考教育信息问答 API:会话参数、资料引用与流式响应
java·数据库·高考
bro_Java6662 小时前
《排序的底层逻辑:比较、交换与分治》
java·算法·排序算法
booboosui3 小时前
Android 悬浮窗藏不住自己:一个标志位与 140 毫秒
android
传奇开心果3 小时前
【Flutter踩坑排雷】第5课:扩展方法冲突坑|同名扩展引发编译歧义,故障规避手段
android·flutter
文丑颜不良啊3 小时前
LeetCode2081~2100题目解析
java·leetcode
玖米GEO运营王总监4 小时前
2026年账号矩阵协同效应怎么量化:三个指标与公式结构
java·大数据·数据库
叼烟扛炮5 小时前
[LangChain] 学习笔记(03):打破失忆症——对话机制与上下文管理
java·前端·javascript·笔记·学习·langchain
文丑颜不良啊5 小时前
LeetCode2061~2080题目解析
java·leetcode