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 ?: "未知"
相关推荐
孟陬1 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端
想用offer打牌1 小时前
一站式了解四种限流算法
java·后端·go
华仔啊2 小时前
Java 开发千万别给布尔变量加 is 前缀!很容易背锅
java
Kapaseker2 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
也些宝3 小时前
Java单例模式:饿汉、懒汉、DCL三种实现及最佳实践
java
Nyarlathotep01133 小时前
SpringBoot Starter的用法以及原理
java·spring boot
wuwen53 小时前
WebFlux + Lettuce Reactive 中 SkyWalking 链路上下文丢失的修复实践
java
SimonKing3 小时前
GitHub 10万星的OpenCode,正在悄悄改变我们的工作流
java·后端·程序员
Seven974 小时前
虚拟线程深度解析:轻量并发编程的未来趋势
java