null问题
- kotlin更多地把运行时可能出现的null问题,以编译时错误的方式,提前在编译器强迫我们重视起来,防范于未然 可空性
- 对于null问题,kotlin中除非另有规定,否则变量不可以为null值
使用 ? 标明这个变量是可空类型
var str:String? = null
kotlin区分可空类型和非可空类型,所以一个可空类型变量运行,而它又可能不存在,对于这种潜在风险,kotlin不允许你在可空类型上调用函数,除非主动接手安全管理
安全调用操作符
str.capitalize()
直接这样会报错,str?.capitalize()
这样就不报错了,编译器看到有安全调用操作符,所以它知道如何检查null值,如果遇到null,就跳过函数调用,而不是返回null
使用let标准函数
str?.let {
//条件成立则执行
if (it.isNotBlank()){
it.capitalize()
}else{
""
}
}
使用非空断言操作符
- !!. 又称为感叹号操作符,当变量为null时,会抛出 KotlinNullPointerException
str!!.capitalize()
使用空合并操作符
?:的意思是,如果左边的求值结果为null,就是用右边的结果值
val abc = str?:"abc"
先决条件函数
- kotlin提供的内置函数,可以抛出带自定义信息的异常
- checkNotNull:如果参数为空,抛出IllegalStateException,否则返回非null值
- require:如果参数为false,则抛出IllegalStateException
- requireNotNull:参数为空,则抛出IllegalStateException
- error:如果参数为空,抛出IllegalStateException并输出错误信息
- assert:如果参数为flase,则抛出AssertError异常,并打上断言编译器标记