6:kotlin 空值安全(Null safety)

2023-11-23 15:44
文章标签 安全 kotlin null 空值 safety

本文主要是介绍6:kotlin 空值安全(Null safety),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Kotlin中,是可以有空值的。为了防止程序中出现空值问题,Kotlin实施了空值安全。空值安全在编译时而不是运行时检测到可能的空值问题。

空值安全是一组功能的组合,允许您:

  • 明确声明程序中允许空值的地方。
  • 检查空值。
  • 对可能包含空值的属性或函数进行安全调用。
  • 如果检测到空值,声明要采取的行动。

空值类型(Nullable types)

kotlin中,默认属性不支持空值,如果想要支持空值,需要在属性定义时使用?显示的设置

fun main() {var neverNull: String = "This can't be null"
//    neverNull = null    // 编译报错 - Null can not be a value of a non-null type Stringvar nullable: String? = "You can keep a null here"nullable = null
}

空值检测(Check for null values)

fun describeString(maybeString: String?): String {if (maybeString != null && maybeString.length > 0) {return "字符串长度 ${maybeString.length}"} else {return "空值或者null"}
}fun main() {var nullString: String? = nullprintln(describeString(nullString)) // 空值或者null
}

实际情况下可能还要检测字符串是否是多个空格组成的

安全调用(Use safe calls)

如果想避免代码中出现空值引发错误,可以使用安全调用运算符?.。如果对象的属性为空,安全调用运算符将返回空

fun lengthString(maybeString: String?): Int? = maybeString?.lengthfun main() { var nullString: String? = nullprintln(lengthString(nullString))  // null
}

安全调用可以采用链式编程 a?.b?.c

安全调用同样支持类方法

默认值(Use Elvis operator)

可以使用?:运算符在检测到空值时提供一个默认值

fun main() {var nullString: String? = nullprintln(nullString?.length ?: 9)  // 9
}

这篇关于6:kotlin 空值安全(Null safety)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/418984

相关文章

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数