I'm converting Java to Kotlin with Android Studio. I get double bang after the instance variable. What is the double bang and more importantly where is this documented?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
I'm converting Java to Kotlin with Android Studio. I get double bang after the instance variable. What is the double bang and more importantly where is this documented?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
这是不安全的可空类型 ( T?
) 转换为非可空类型 ( T
),
!!
如果NullPointerException
值为null
.
它与 Kotlin 零安全方法一起记录在此处。
这是一个让事情更清楚的例子。假设你有这个功能
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
这将产生以下编译错误。
Null can not be a value of a non-null type String
现在,您可以通过向类型添加问号以String
使其可为空来防止这种情况。
所以我们有
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
这会产生一个结果
null
现在如果我们希望函数在 email 的值为 null 时抛出异常,我们可以在 email 的末尾添加两个感叹号。像这样
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
这将抛出一个KotlinNullPointerException
Double-bang 运算符NullPointerException
对于(或简称为 NPE)的粉丝来说是一个很好的选择。
非空断言运算符
!!
将任何值转换为非空类型,如果值为空则抛出异常。
val nonNull = a!!.length
所以你可以写a!!
,这将返回一个非空值a
(例如这里的a )或者如果为空String
则抛出一个NPE 。a
如果你想要一个 NPE,你可以拥有它,但你必须明确要求它。此运算符应在开发人员保证的情况下使用 - 值永远不会为 null。