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 老项目迁移系列,持续更新中。

相关推荐
郑州光合科技余经理18 分钟前
海外外卖平台源码改造实战——多语言核心代码实现
java·开发语言·前端·后端·mysql·架构·php
耀耀_很无聊21 分钟前
12_Redis Lua 脚本踩坑:为什么 tonumber(ARGV[x]) 会得到 nil?
java·redis·lua
悲凉的紫菜27 分钟前
dariy
android·ide·android studio
奶油话梅糖31 分钟前
锐捷常用命令速查表
java·网络·windows
code_std1 小时前
java WebSocket 使用
java·开发语言·websocket
2501_915909061 小时前
IPA 深度混淆是什么意思?从混淆强度到实际效果的解读
android·ios·小程序·https·uni-app·iphone·webview
落叶-IT1 小时前
Java Scanner 类精讲:控制台交互
java·开发语言
chh5631 小时前
C++--string
java·开发语言·网络·c++·学习
Listen·Rain1 小时前
向量化详解
java·人工智能·spring·机器学习·ai
想你依然心痛1 小时前
AUTOSAR Classic Platform架构解析:BSW、RTE与ASW——分层、配置、代码生成
java·架构·实时互动