kotlin具有非无效断言,我发现了一些有趣的东西...
val myvar: String = null!!
它将崩溃。
但要点是,它不会在编译时间检查。
该应用将在运行时崩溃。
不应该抛出编译时间错误吗?
!!
在运行时评估,它只是一个操作员。
表达式 (x!!)
- 如果
x == null
,
,将 - 否则,它将返回
x
铸造为相应的不可拆卸类型(例如,当在带有String?
类型的变量上调用时,它将其返回为String
(。
KotlinNullPointerException
投掷当然,这是throw KotlinNullPointerException()
的null!!
速记。
如果有帮助,您可以将!!
视为执行与这样的函数相同的事情:
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()
相同的结果。