首页 文章

Kotlin对null的非null断言

提问于
浏览
3

由于Kotlin有非空的断言,我发现了一些有趣的东西......

val myvar: String = null!!

它会崩溃 .

但重点是,它不会在编译时检查 .

该应用程序将在运行时崩溃 .

它不应该抛出编译时错误吗?

1 回答

  • 7

    !! 在运行时进行评估,它只是一个运算符 .

    表达式 (x!!)

    如果 x == null

    • 会抛出 KotlinNullPointerException

    • 否则,它返回 x 强制转换为相应的非可空类型(例如,当调用类型为 String? 的变量时,它将返回为 String ) .

    当然,这会使 null!!throw KotlinNullPointerException() 的简写 .


    如果有帮助,您可以将 !! 视为与此类函数相同:

    fun <T> T?.toNonNullable() : T {
        if(this == null) {
            throw KotlinNullPointerException()
        }
        return this as T // this would actually get smart cast, but this 
                         // explicit cast demonstrates the point better
    }
    

    所以做 x!! 会给你与 x.toNonNullable() 相同的结果 .

相关问题