Kotlin对null的非null断言

时间:2017-06-27 15:50:48

标签: android android-studio null kotlin kotlin-null-safety

由于Kotlin有非空主张,我发现了一些有趣的东西......

val myvar: String = null!!

它会崩溃。

但关键是,它不会在编译时检查。

应用程序将在运行时崩溃。

不应该抛出编译时错误吗?

1 个答案:

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