kotlin 空指针和let 、apply 、run笔记

400 阅读1分钟

1、?为非空安全符

var str: String? = null
 str?.let{
    if(it.isNotBlank()){
        it.capitalize()//大写
    }else{
         "i'm str"
    }
 }

2.!!为非空断言符

var str: String? = null
 str!!.capitalize()
输出:
Exception in thread "main" kotlin.KotlinNullPointerException
	at SpecialFunKt.main(SpecialFun.kt:5)
	at SpecialFunKt.main(SpecialFun.kt)

3.?:空合并操作符

var str: String? = null
println(str?:"jack")
输出:
jack

4.let 第一次参数为调用者本身,返回结果。
5.also 同let,但是返回结果。

var str = "str".let{
    it=="str"
}
 var str2 = "str".also {
     it=="str"
 }
 println(str)
 println(str2)
输出:
true
str

6.apply 返回的参数为接收者本身

var str = "one"
var str2: String = str.apply {
    str=replace("one", "two")
}
println(str)
println(str2)
输出:
two
one

7.run 返回结果

var str = "one"
var str2: String = str.run {
    replace("one", "two")
}
println(str2)
输出:
two

8.with 同run

var str = "one"
var relut = str.run {
   length>2
}
var result = with(str){
    length>2
}
println(relut)
println(result)
输出:
true
true

9.takeIf 同apply true返回接收者对象,false 返回null ,takeUnless 与takeIf 相反。

var str = "str".takeIf {
    it == "str"
}
var str2 = "str".takeIf {
    it == "sss"
}
println(str)
println(str2)
输出:
str
null