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