由于 Kotlin 具有非空断言,我发现了一些有趣的事情...
val myvar: String = null!!
它会崩溃。
但重点是,它不会在编译时检查。
应用程序将在运行时崩溃。
难道它不应该抛出编译时错误吗?
val myvar: String = null!!
它会崩溃。
但重点是,它不会在编译时检查。
应用程序将在运行时崩溃。
难道它不应该抛出编译时错误吗?
!!
在运行时进行求值,它只是一个操作符。
表达式 (x!!)
x == null
,则抛出 KotlinNullPointerException
异常,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()
相同的结果。
val myvar: String =
并显示警告:“无法访问的代码”。 - mfulton26