阅读 605

Kotlin 非空性总结

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 异常
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字段。
lateinit 属性常见是依赖注入,lateinit属性的值是被依赖注入框架从外部设置的, 为了保证和各种Java(依赖注入)框架的兼容性,Kotlin会自动生成一个和lateinit属性具有相同可见性的字段。

可空类型的扩展

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

  • String的标准函数库中有isEmpty和isBlank
文章分类
Android