Kotlin在null上的非null断言

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

val myvar: String = null!! 

它会崩溃。

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

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

不应该抛出编译时错误?

!! 在运行时进行评估,这只是一个操作符。

表达式(x!!)

  • 抛出一个KotlinNullPointerException如果x == null
  • 否则,它将返回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()相同的结果。