Kotlin 非空性

Fighting.jpg

kotlin函数的判空检查都是在编译期的

可空类型 (s:String?)

问号可以加在任何类型的后面来标识这个类型的变量可以存储null引用:
Type?= Type or null (可空类型的变量可以存储null引用)
允许参数可空后,一些操作将会受到限制

  • 不能调用自身的方法
  • 不能把它赋值给非空类型的变量
  • 不能把可空类型的值传给拥有非空类型参数的函数

安全调用运算符 : "?."

?. 允许吧一次null检查和一次方法调用合并成一个操作。安全调用不光可以调用方法,也能用来访问属性

  type?.type  => if(type !=null){ type.type}else{ null}
                              

Elvis 运算符 : “?:”

kotlin 用Elvis运算符来提供null的默认值

 var s:String= type?:string => if(type==null){ s=string}else{ s=type}

可以用在return和throw返回参数

安全转换 : “as?”

在java中类型转换错误会抛出 ClassCastException 异常</br>
as?运算符尝试把值转换成制定类型,没有合适的类型就返回null

troll as?Type => if(troll is Type){ troll as Type}
                 if(troll !is Type){ null}
  

非空断言 : “ !!”

非空断言是kotlin最简单的处理可空类型值的工具

type !! => if(type !=null){ type} else{NullPointerException}

“let”函数

let函数可以处理可空表达式变得更加简繁,和安全调用运算符一起,允许对表达式求值,检查求值结果是否为null,并且把结果保存为一个变量

type ?.let{相应的处理} => if(type !=null){ 进行lambda内部相对应处理}else{ 什么都不发生}

延迟初始化属性 lateinit

Android 中,Activity的初始化发生在onCreate方法中

延迟初始化的属性都是var,因为需要在构造方法外修改它的值,而val属性会被编译成必须在构造方法中初始化的final字段。</br>
lateinit 属性常见是依赖注入,lateinit属性的值是被依赖注入框架从外部设置的, 为了保证和各种Java(依赖注入)框架的兼容性,Kotlin会自动生成一个和lateinit属性具有相同可见性的字段。

可空类型的扩展

可空类型定义扩展函数是一种强大的处理null值的方式,允许接收者为null的扩展函数调用,并在改函数中处理null,而不是在确保变量不为null之后再调用它的方法。

  • String的标准函数库中有isEmpty和isBlank
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,315评论 9 118
  • 写在开头:本人打算开始写一个Kotlin系列的教程,一是使自己记忆和理解的更加深刻,二是可以分享给同样想学习Kot...
    胡奚冰阅读 932评论 2 4
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,236评论 0 13
  • kotlin的类型系统相比Java,引入了一些新特性,它们是提升代码的可读性的基本要素之一,比如对可空类型和只读集...
    程自舟阅读 3,382评论 1 5