kotlin 空安全以及各种操作

99 阅读2分钟

空安全

nul
​**>在Java中我们司空见惯的空指针异常NullPointerException,​
带给了我们很多麻烦。Kotlin作为更强大的语言,​
势必会基于以往的语言设计经验对其进行改良。Kotlin更以编译时错误的方式,​
提前在编译期强迫我们多地把运行时可能会出现的nuI问题重视起来,​
而不是等到运行时报错,防范于未然,提高了我们程序的健壮性**​

可空类型和非可空类型

kotlin区分可空类型和非可空类型,所以,你要一个可空类型变量运行,​
而它又可不存在,对于这种潜在危险,编译器时刻警着。​
为了应对这种风险,Kotlin不允你在可空类型值上调用函数,除非你主动接手安全管理
var str:String?="哈哈哈"​
println(str)​


使用带let的安全调用
安全调用允许在可空类型上调用函数,但是如果还想做点额外的事,​
比如创建新值>或判断不为null就调用其他函数,怎么办?可以使用带let函数的安全调用操作符。​
你可以在任何类型上调用let函数,它的主要作用是让你在指定的作用域内定义一个或多个变量。​

var str:String?="butterfly"
​**str =""​**​
str=str?.let { ​**let 函数返回的是表达式最后一行返回的结果**​
    ​**非空白的字符串**​
    if(it.isNotBlank()){
        it.capitalize()​**将字符串的首字母变成大写**​
    }else {
        "butterfly"
    }
}
println(str)

空安全断言操作符

选项二:使用非空断言操作符 !!.又称感叹号操作符,当变量值为null是会抛出KotlinNullPointerException。

 var str:String?="butterfly"
 str=null
// println(str!!.capitalize())  //使用感叹号非空断言操作符
 if(str!=null){
     str=str.capitalize()
 }else {
     println("为null")
 }

空合并操作符

使用空合并操作符?:操作符的意思是,如果左边的求值结果为nul,就使用右边的结果值

  str=str?.capitalize()?.plus("is great")
  println(str)

  println(str?:"xuqing")
  str="xuqing"
  //空合并操作符也可以和let函数一起使用来代替if/else语句
  str=str?.let { it.capitalize() }?:"butterfly"

  println(str)