Kotlin入门学习笔记基础篇(一)
有效减少空指针错误是kotlin的一大有点,那么它是如何做到的呢?
kotlin中避免变量空指针错误的解决方案:
- 可空变量类型声明 ( ? )
- 可空类型与安全调用操作符 ( ?. )
- Elvis操作符 ( ?: )
可空类型 (?)
变量定义
var是可变变量,val是不可变变量,相当于java中final修饰
val name: String = "Mike" //一旦赋值,不可更改
var age: Int = 24
var height: Float
age += 1
height = 178.5F
定义变量尾部不加问号,则编译器要求该值不能为空
var name: String
name = "Mike"
//name = null //不能为空,否则编译报错
想要允许变量为空,则在类型后面加问号
class Person(
val first: String,
val middle: String?, //可为空
val last: String
)
val p = Person("North", null, "West")
检测变量是否为空
val声明,if语句内,将p.middle智能转换为非空类型
val p = Person("North", null, "West")
if (p.middle != null) {
//上面是val不可更改,所以p.middle这里不会变为空,
val middleNameLength = p.middle.length //智能转换为非空类型
}
但若是var声明,则不同,需要用 非空断言(!!.) 或者 Elvis安全调用操作符(?😃
非空断言在变量为空时会出现NullPointerException空指针错误,所以一般不建议这么做
推荐用Elvis操作符,指定为空时返回的值
var p= Person("North", null, "West")
if (p.middle != null) {
//上面是var,可能在判断之后变为空,
val middleNameLength = p.middle!!.length //方法一:用“非空断言” !!.
val middleNameLength2 = p.middle?.length ?: 0 //方法二:Elvis安全调用操作符 ?:
val middleNameLength3 = p.middle?.length ?: return
}
强制转换 (as)和安全转换(as?)
var p:Person?
p = Person("North", null, "West")
//as 强制转换
val p0 = p as Person
p = null
//as?安全转换,当p是null时,p1也是null
val p1 = p as? Person
println(p1) //null