繁体   English   中英

Kotlin对null的非null断言

[英]Kotlin non-null assertion on null

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

val myvar: String = null!!

它会崩溃。

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

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

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

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

表达式(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()相同的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM