由于Kotlin有非空的断言,我发现了一些有趣的东西......
val myvar: String = null!!
它会崩溃 .
但重点是,它不会在编译时检查 .
该应用程序将在运行时崩溃 .
它不应该抛出编译时错误吗?
!! 在运行时进行评估,它只是一个运算符 .
!!
表达式 (x!!)
(x!!)
如果 x == null ,
x == null
会抛出 KotlinNullPointerException ,
KotlinNullPointerException
否则,它返回 x 强制转换为相应的非可空类型(例如,当调用类型为 String? 的变量时,它将返回为 String ) .
x
String?
String
当然,这会使 null!! 为 throw KotlinNullPointerException() 的简写 .
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() 相同的结果 .
x!!
x.toNonNullable()
1 回答
!!
在运行时进行评估,它只是一个运算符 .表达式
(x!!)
如果
x == null
,会抛出
KotlinNullPointerException
,否则,它返回
x
强制转换为相应的非可空类型(例如,当调用类型为String?
的变量时,它将返回为String
) .当然,这会使
null!!
为throw KotlinNullPointerException()
的简写 .如果有帮助,您可以将
!!
视为与此类函数相同:所以做
x!!
会给你与x.toNonNullable()
相同的结果 .