Kotlin常见技术分享-01-相对于Java 的核心优势-空安全

空安全 (Null Safety)

kotlin 相比于 Java 的第一个核心技术优势 是 空安全。

Kotlin 在类型系统中集成了 空安全机制。

能够在编译时 检测潜在的 空指针 异常,

  • 编译时检查: kotlin 区分可空类型(如 String?) 和 非空类型(如 String )
  • 安全调用操作符: 提供?. 操作符, 可以在对象为空时 安全的 调用方法 或访问属性。 而不会引发一场。
  • Elvis 操作符: 提供 ?: 操作符
安全调用操作符(Safe Call Operator)示例
kotlin 复制代码
// Java 写法(容易出现 NullPointerException)
String name = user.getAddress().getCity().getName();
// 如果 getAddress() 或 getCity() 返回 null,就会抛出异常

// Kotlin 写法(安全调用)
val name = user.address?.city?.name
// 如果任何一个属性为 null,整个表达式返回 null,不会抛出异常
Elvis 操作符示例
kotlin 复制代码
// Kotlin 中使用 Elvis 操作符提供默认值
val name = user.name ?: "未知用户"
// 如果 user.name 为 null,则使用 "未知用户" 作为默认值

// 更复杂的 Elvis 操作符用法
fun getLength(name: String?): Int {
    return name?.length ?: 0  // 如果 name 为 null,返回 0
}

// Elvis 操作符还可以用于提前返回或抛出异常
fun processUser(user: User?) {
    val userName = user?.name ?: return  // 如果 user 或 name 为 null,直接返回
    println(userName)
}
对比 Java 的传统写法
kotlin 复制代码
// Java 中需要大量 null 检查
String name;
if (user != null && user.getAddress() != null && user.getAddress().getCity() != null) {
    name = user.getAddress().getCity().getName();
} else {
    name = "未知";
}

// Kotlin 简洁写法
val name = user?.address?.city?.name ?: "未知"
相关推荐
hrhcode2 小时前
【java工程师快速上手go】二.Go进阶特性
java·golang·go
dashizhi20152 小时前
共享文件禁止拖动本地磁盘、共享文件禁止另存为、禁止打印共享文件、禁止复制共享文件的方法
运维·服务器·网络·安全·电脑
网教盟人才服务平台2 小时前
AI 全面重塑网络攻防生态,智能安全进入深度对抗时代
网络·人工智能·安全
小碗羊肉3 小时前
【从零开始学Java | 第三十一篇下】Stream流
java·开发语言
qq_260241234 小时前
将盾CDN:网络安全人才培养的困境与破局之道
安全·web安全
❀͜͡傀儡师4 小时前
Spring AI Alibaba vs. AgentScope:两个阿里AI框架,如何选择?
java·人工智能·spring
aq55356004 小时前
Laravel10.x重磅升级,新特性一览
android·java·开发语言
一 乐4 小时前
酒店预订|基于springboot + vue酒店预订系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·酒店预订系统
Moe4885 小时前
Spring AI Advisors:从链式增强到递归顾问
java·后端
敖正炀5 小时前
ReentrantReadWriteLock、ReentrantLock、synchronized 对比
java