简介
此文档记做Kotlin开发过程中遇到的问题以及总结
空安全
可空对象
Kotlin与Java不同,对象分为可空和不可空,可空在类型声明后加 ?
。
var b : String?
若类型为不可空,此时赋空编译器则会报错。
var b : String = "1"
b = null // 编译不通过
安全的类型转换
Java在类型转换时,如果类型不匹配则会出现类型强转异常ClassCastException
导致Crash;而Kotlin则可以采取安全的类型转换。
// 若a的类型不为Int则返回null,不会导致crash
val aInt: Int? = a as? Int
安全的调用
在使用可能为空的对象时,Java中若不进行空判断则非常容易产生空指针异常,所以经常会出现下面的代码。
if (不为空) { } else { }
而Kotlin中可以采用安全的调用方式。
// 如果 b 非空,就返回 b.length;否则返回 null
val bLength: Int? = b?.length
若想对非空值执行某个操作,安全调用操作符可以与 let 一起使用。
bLength?.let{
// 具体逻辑
}
// 只有bLength不为空时才会执行lambda表达式
Elvis操作符
当我们有一个可空的引用 b 时,我们可以说 如果 b 非空,我使用它;否则使用某个非空的值 x
val bLength: Int = if (b != null) b.length else -1
除了采用if的方式还可以使用elvis操作符?:
,与Java中的三目表达式类似:
。
// 如果 ?: 左侧表达式非空,elvis 操作符就调用其左侧表达式,否则调用右侧表达式。
val bLength = b?.length ?: -1
!!
操作符
若想抛出空指针异常NPE
// 若b为空则抛出空指针异常
val bLength = b!!.length