我正在使用Android Studio将Java转换为Kotlin。我在实例变量后获得双重爆炸。什么是双重爆炸,更重要的是记录在哪里?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
答案 0 :(得分:137)
这是不安全的可空类型(T?
)转换为非可空类型(T
)。
如果值为NullPointerException
,它将抛出null
。
记录here以及Kotlin无效安全手段。
答案 1 :(得分:54)
这是一个让事情更清晰的例子。 假设你有这个功能
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时抛出异常,我们可以在电子邮件末尾添加两个惊叹号。喜欢这个
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
这将抛出KotlinNullPointerException
答案 2 :(得分:0)
这对于NullPointerException
(或简称NPE)爱好者来说是一个不错的选择:非空断言运算符 !!
可以转换任何内容值为非空类型,如果该值为null,则抛出异常。
val lll = a!!.length
因此您可以编写 a!!
,这将返回非空值 a
(此处为String
例如),如果 a
为空,则抛出NPE。
如果需要NPE,可以使用它,但是必须明确要求它。 在开发人员保证的情况下应使用此运算符-值永远不会为空。
希望这会有所帮助。