您现在的位置是:首页 >技术教程 >安卓开发:使用可为null性网站首页技术教程

安卓开发:使用可为null性

汉武大帝· 2024-06-14 17:17:50
简介安卓开发:使用可为null性

Kotlin园地 地址:Kotlin 园地  |  Android 开发者  |  Android Developershttps://developer.android.google.cn/training/kotlinplayground?hl=zh-cn

 以下简称 “K园”

先在K园执行以下代码:

fun main() {
    var fa: String = "sandra on";
    println("fa的长度是" + fa.length)
}

执行结果:fa的长度是9

以上代码中 变量 fa 只能存储String类型的数据,如果想声明变量 fa 可为 null 类型,则需要在变量类型后加 ?  运算符,如下所示:

fun main() {
    var fa: String? = "sandra on";
    println("fa的长度是" + fa.length)
}

执行结果:

Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?只有安全(?.)或非空断言(!! !)调用被允许在类型为String的可空接收器上?

如果fa为null,  fa变量上没有某些方法或者属性,比如 length, 则会报错, 

解决方式:

方式一:使用 ?.  安全调用运算符,可以使用 ?. 安全调用运算符访问可为 null 变量的方法或属性。

修改一下代码:

fun main() {
    var fa: String? = "sandra on";
    println("fa的长度是" + fa?.length)
}

执行结果:fa的长度是9;

当fa 为 null 时,看一下:

fun main() {
    var fa: String? = null;
    println("fa的长度是" + fa?.length)
}

执行结果:fa的长度是null    ;  不会报错了

方式二:使用 !! 非 null 断言运算符

如果使用 !! 非null断言运算符,即表示您断言变量的值不是 null , 当变量值为null , 使用 !! 非null断言运算符会导致系统抛出NullPointerException 错误,只有当变量不为null或者设置了适当的异常处理时,才可使用断言运算符,后续会写处理异常的文章;

fun main() {
    var fa: String? = null;
    println("fa的长度是" + fa!!.length)
}

 方式三:if/else 语句可以与 null 检查一起使用

fun main() {
    var fa: String? = null;
    val long = if(fa != null) {
        fa.length
    } else {
        0
    }
    println("fa的长度是" + long)
}

执行结果:fa的长度是0

方式四:使用 ?: Elvis 运算符

Elvis运算是一个小技巧,其实就是if else 的简化写法。

fun main() {
    var fa: String? = null;
    val long = fa?.length ?: 0
    println("fa的长度是" + long)
}

执行结果:fa的长度是0

fun main() {
    var fa: String? = "记录据了解";
    val long = fa?.length ?: 0
    println("fa的长度是" + long)
}

执行结果:fa的长度是5

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。