mbr*_*_ml 133 kotlin kotlin-null-safety
我正在用Android Studio将Java转换为Kotlin.我在实例变量后获得双重爆炸.什么是双重爆炸,更重要的是这在哪里记录?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
Run Code Online (Sandbox Code Playgroud)
hot*_*key 169
这是不安全的可空类型(T?)转换为非可空类型(T).NullPointerException如果值是,它将抛出null.
这里记录了Kotlin的零安全手段.
Alf*_*Moh 67
这是一个让事情更清晰的例子.说你有这个功能
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
Run Code Online (Sandbox Code Playgroud)
这将产生以下编译错误.
Null can not be a value of a non-null type String
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过向String类型添加问号以使其可为空来防止这种情况发生.
所以我们有
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
Run Code Online (Sandbox Code Playgroud)
这产生了结果
null
现在,如果我们希望函数在email的值为null时抛出异常,我们可以在电子邮件末尾添加两个惊叹号.像这样
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
Run Code Online (Sandbox Code Playgroud)
这将抛出一个 KotlinNullPointerException
ARG*_*Geo 20
Double-bang operator是NullPointerException(或简称 NPE)粉丝的绝佳选择。
该不是空断言运营商
!!转换为任意值非空类型,如果值为null抛出异常。
val nonNull = a!!.length
Run Code Online (Sandbox Code Playgroud)
所以你可以写a!!,这将返回一个非空值a(String例如a here)或者如果a为空则抛出一个 NPE 。
如果你想要一个 NPE,你可以拥有它,但你必须明确要求它。在开发人员保证的情况下应使用此运算符 - 值永远不会为 null。
| 归档时间: |
|
| 查看次数: |
43999 次 |
| 最近记录: |