用 Kotlin 写 Android 4—空安全,等式判断

空安全

在 Kotlin 里,默认情况下声明的变量是不能为 null 值的,也就是说如果像 Java 里那样的写法就不能为 null。如果变量值有可能为 null,就要在类型后面带上 ?,否则当不为 null 值的变量出现 null 的情况就会报 NPE(NullPointerException)

var name: String?

在变量可能为 null 的情况下进行变量引用时,为了确保不会报 NPE,但又不想像 Java 那样加判断,可以用 ?. 来引用,到变量为 null 时,返回的也是 null

var len = name?.length

但有时可能并不希望变量为 null 是就返回 null 值,而是一个默认值,例如 -1。那么此时可以在语句的后面再使用 ?: xx,来指定变量为 null 值是的返回值为 xx

var len = name?.length?: -1

最后,倘若虽声明时变量有可能为空,实际上肯定不存在 null 值的情况时,可以用 !!. 引用,表示一定不为空的,不然就报 NPE 好了。

var len = name!!.length

等式判断

这里的等式判断我认为有两种,一种是同 Java 概念里的等式判断,一种是同 Java 概念里的类型从属关系判断。

等式判断

在 Kotlin 里,值相等用 ==,如果要求对象引用相等则用 ===,以此类推,值不等用 !=,对象引用不等用 !==。

类型从属关系

在 Java 里,用 instanceof 来判断一个对象是否是某个类型,而 Kotlin 里简化了单词用的是 is,

//表示 name 是否为 String 类型,是的话 relation 为 true
var relation = name is String
//表示 name 是否为 String 类型,是的话 relation 为 false
relation = name !is String

在 Kotlin 里,用 in 来判断变量是否在某个区间内,或者在某个数组内,这个逻辑在 Java 里实现可能没这么简单,

val array = IntArrayOf(1, 2, 3, 4, 5)
var i = 0
//表示 i 是否在数组 array 内,此时的 belong 应为 false
var belong = i in array
i = 4
//表示 i 是否在数组 array 内,此时的 belong 还应为 false
belong = i !in array
//表示 i 是否在区间[0, 100] 内,此时的 belong 应为 true
belong = i in 0..100

你可能感兴趣的:(用 Kotlin 写 Android 4—空安全,等式判断)