由于Kotlin有非空主张,我发现了一些有趣的东西......
val myvar: String = null!!
它会崩溃。
但关键是,它不会在编译时检查。
应用程序将在运行时崩溃。
不应该抛出编译时错误吗?
答案 0 :(得分:9)
!!
在运行时进行评估,它只是一个运算符。
表达式(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()
相同的结果。