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 ?: "未知"
相关推荐
Hx_Ma161 天前
Map集合的5种遍历方式
java·前端·javascript
小手cool1 天前
Java 列表中查找最小值和最大值最有效率的方法
java
惊讶的猫1 天前
多线程同步问题及解决
java·开发语言·jvm
wfsm1 天前
工厂模式创建动态代理实现类
java·开发语言
好好研究1 天前
总结SSM设置欢迎页的方式
xml·java·后端·mvc
Hui Baby1 天前
java -jar 启动原理
java·pycharm·jar
weixin_511255211 天前
更新jar内资源和代码
java·jar
木井巳1 天前
【递归算法】验证二叉搜索树
java·算法·leetcode·深度优先·剪枝
不当菜虚困1 天前
windows下HSDB导出class文件报错【java.io.IOException : 系统找不到指定的路径。】
java·开发语言
小马爱打代码1 天前
Spring Boot:第三方 API 调用的企业级容错设计
java·spring boot·后端