Kotlin中的安全导航操作符?.、空合并运算符?:以及let函数的实践与理解

在Kotlin编程语言中,为了更好地处理可能为null的对象引用,引入了一系列优雅且实用的操作符和函数。本文将深入探讨其中三个关键工具:安全导航操作符?.、空合并运算符?:以及let函数,并通过示例代码展示其应用场景。

安全导航操作符(Safe Navigation Operator)?.

安全导航操作符?.允许我们在访问可能为null的对象成员时不抛出NullPointerException。如果对象非null,则执行后续操作;否则,整个表达式返回null。

fun doStudy(study: Study?) {study?.readBooks(); // 如果study不为null,则调用readBooks()方法,否则不做任何操作study?.doHomework(); // 同理,仅当study非null时执行doHomework()
}

空合并运算符(Elvis Operator)?:

空合并运算符?:用于条件性地返回两个表达式中的一个。如果左侧表达式不为null,则返回该表达式的值;否则返回右侧表达式的值。

var a: Int = 1
var b: Int = 2
var c: Int = a ?: b // 如果a不为null,则c=a;若a为null,则c=b,在本例中c将被赋值为1

let函数

let函数是Kotlin标准库提供的一个扩展函数,它接收一个lambda表达式作为参数,并在其主体内对一个可空对象进行操作。let函数确保了即使在对象为空的情况下也能避免NullPointException,并能提供简洁的链式调用。

study?.let { stu ->stu.readBooks()stu.readBooks()
}// 或更简化的写法:
study?.let {it.readBooks()it.readBooks()
}

在这段代码中,只有当study非null时,才会执行lambda表达式内的代码。在lambda表达式内部,我们可以直接使用it来引用study对象,并安全地调用其方法。

注意事项

尽管!!非空断言操作符可以强制转换一个可能为null的变量为非null类型并访问其属性或方法,但强烈建议尽量避免使用此操作符,因为它可能导致运行时NullPointerException。在上述示例中,text!!.uppercase()如果text为null则会抛出异常。

总结来说,?.?:以及let都是Kotlin用来处理null安全性的重要工具,它们使代码更加简洁且易于维护,有效降低了由于空指针导致的程序崩溃风险。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/708717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态规划之使用最小花费爬楼梯【LeetCode】

动态规划之使用最小花费爬楼梯 LCR 088. 使用最小花费爬楼梯解法1解法2 LCR 088. 使用最小花费爬楼梯 LCR 088. 使用最小花费爬楼梯 解法1 状态表示(这是最重要的):dp[i]表示以第i级台阶为楼层顶部,到达第i层台阶的最低花费。 状…

【VSCode】解决VSCode远程连接问题:远程主机可能不符合 glibc 和 libstdc++

今天用VSCode进行ssh连接时,提示“远程主机可能不符合 glibc 和 libstdc VSCode 服务器的先决条件”。查了一下发现这个问题主要是由于VSCode在一月份发布的最新版本v1.86中要求远程主机 glibc>2.28导致的,所以ssh连接Ubuntu 18.04的时候就会提示这个…

详解 Rope (Opal-03a) 的变化

文章目录 (一)特点(二)使用流程(三)界面(四)详解(4.1)目录区域⭐Start Rope⭐Video Folder⭐Output Folder⭐Faces Folder (4.2)预览控…

Python爬虫项目实战案例-批量下载网易云榜单音乐保存至本地

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…

汽车后视镜反射率检测仪厂家

随着汽车工业的快速发展,汽车后视镜作为驾驶员观察车辆周围环境的重要工具,其性能和质量对于交通安全至关重要。汽车后视镜的反射率检测仪是一种用于检测汽车后视镜反射性能的专业设备,其重要性不言而喻。本文将重点介绍汽车后视镜反射率检测…

射频识别RFID

射频识别(RFID)是 Radio Frequency Identification 的缩写。 射频识别技术是自动识别技术的,通过无线射频方式进行非接触双向数据通信,利用无线射频方式对记录媒体(电子标签或射频卡)进行读写,…

【jest使用】

Quick Start 安装: npm install --save-dev jest让我们开始为一个假设函数编写测试,该函数将两个数字相加。 首先,创建一个 sum.js 文件: function sum(a, b) {return a b; } module.exports sum;然后,创建一个名…

Mallox勒索病毒的最新威胁:如何恢复您的数据?

引言: 在当今数字化时代,网络安全威胁层出不穷,而勒索软件(Ransomware)是其中最为恶劣的一种形式之一。而.Mallox勒索病毒则是近期备受关注的一种勒索软件,其深受全球各地用户的困扰。那么,让我…

VMWare ESXi安装留档

缘起 由于手边的一台Dell R730是三块硬盘raid0 ,把我惊出一身冷汗,准备把它们改组成raid1 或者raid5 。 但是舍不得里面的ESXi 8 ,在寻找能否把raid0改成raid1 还不掉WSXi的方法,很遗憾没有找到。 ESXi软件下载 这样就要重装E…

畅心付推出二维码收款分账,开启简单分账新篇章!

随着商业环境和消费需求的变化,新的商业模式不断涌现,加速产业转型和数字化进程,传统商业模式也在进行变革,比如以往的收租模式就是其中很典型场景之一,如今传统租金也将迎来全面革新。畅心付推出二维码收款分账&#…

『大模型笔记』检索增强生成(RAG):从理论到LangChain实践

检索增强生成(RAG):从理论到LangChain实践 文章目录 一. 什么是检索增强生成(Retrieval-Augmented Generation, RAG)1.1. 问题背景1.2. 解决方案二. 基于LangChain实现的检索增强生成方法2.1. 准备工作2.2. 准备步骤2.3. 第一步:检索2.4. 第二步:增强2.5. 第三步:生成三. 总…

面试中单例模式有几种写法?

“你知道茴香豆的‘茴’字有几种写法吗?” 纠结单例模式有几种写法有用吗?有点用,面试中经常选择其中一种或几种写法作为话头,考查设计模式和coding style的同时,还很容易扩展到其他问题。这里讲解几种猴子常用的写法&…

探讨:围绕 props 阐述 React 通信

在 ✓ 🇨🇳 开篇:通过 state 阐述 React 渲染 中,以 setInterval 为例,梳理了 React 渲染的相关内容。 📢 本篇会 ✓ 🇨🇳 围绕 props 阐述 React 通信 props React 组件使用 pro…

docker安装单机版canal和使用

说明:我安装的组件架构如下: 1、准备一台虚拟机,192.168.2.223,我安装的时候,docker只支持canal1.1.6版本,1.1.7无法使用docker安装.还有一点要补充,就是1.1.6好像不支持es8.0以上版本&#x…

Appium手机Android自动化

目录 介绍 什么是APPium? APPium的特点 环境准备 adb(android调试桥)常用命令 appium图形化简单使用 连接手机模拟器 使用appium桌面端应用程序 ​编辑 整合java代码测试 环境准备 引入所需依赖 书写代码简单启动 ​编辑 Appium元素定位 id定位 介…

前端配置开发环境,新电脑配置前端开发环境,Vue开发环境配置的详细过程(前端开发环境配置,电脑重置后配置前端开发环境)

简介:有时候,我们需要在新电脑 或者 电脑重置后,配置前端开发环境,具体都需要安装什么软件和插件,这里来记录一下(文章适合新手和小白,大佬可以带过)。 ✨前端开发环境,需…

《Spring Security 简易速速上手小册》第3章 用户认证机制(2024 最新版)

文章目录 3.1 认证流程3.1.1 基础知识详解认证流程的核心概念认证流程的步骤 3.1.2 主要案例:内存用户认证案例 Demo:快速启动你的 Spring Boot 守护程序 3.1.3 拓展案例 1:数据库用户认证案例 Demo:让数据库守护你的秘密 3.1.4 拓…

蓝桥杯备赛第二篇(背包问题)

1. 01 背包(采用状态压缩) public static void main(String[] args) {Scanner scanner new Scanner(System.in);int M scanner.nextInt();int N scanner.nextInt();int[] value new int[N 1];int[] weight new int[N 1];int[] dp new int[M 1];…

python的数据结构

文章目录 python的数据结构列表当做堆栈使用将列表当作队列使用 python的数据结构 列表 (List):一种有序的集合,可以包含多个项目。列表中的项目可以轻松地添加、删除或更改。 my_list [1, 2, 3, 4, 5]列表当做堆栈使用 堆栈是一种后进先出&#xff…

代理IP安全问题:在国外使用代理IP是否安全

目录 前言 一、国外使用代理IP的安全风险 1. 数据泄露 2. 恶意软件 3. 网络攻击 4. 法律风险 二、保护国外使用代理IP的安全方法 1. 选择可信的代理服务器 2. 使用加密协议 3. 定期更新系统和软件 4. 注意网络安全意识 三、案例分析 总结 前言 在互联网时代&…