请考虑以下代码:
例
fun main(args: Array<String>) {
maybeWriteMessage()
}
fun maybeWriteMessage(message: String? = null) {
writeMessage(message!!)
}
fun writeMessage(message: String) {
println("Hello World")
}
Run Code Online (Sandbox Code Playgroud)
产量
com.series0ne.ApplicationKt.maybeWriteMessage中的com.series0ne.ApplicationKt.maybeWriteMessage(Application.kt:8)中的线程"main"kotlin.KotlinNullPointerException中的异常.默认(Application.kt:7)位于com.series0ne.ApplicationKt.main( Application.kt:4)
这是因为我传递message!!(null,该死!)到一个不可为空的参数,但是从不访问该参数.
题
为什么Kotlin KotlinNullPointerException在没有访问空引用时强行抛出?
d.f*_*ber 13
message: String?表明message可能会或可能不会null.
由于您的函数maybeWriteMessage的默认值为nullfor,message并且您在maybeWriteMessage()未指定message的情况下调用- null将在调用时使用默认值()writeMessage(message!!).
如文档中所述,!!-operator在值为时抛出异常null.
writeMessage安全触发的一种方法是使用.let:
fun maybeWriteMessage(message: String? = null) {
message?.let {
writeMessage(it)
}
}
Run Code Online (Sandbox Code Playgroud)
运算符!!抛出一个KotlinNullPointerExceptionifmessage为 null。
你可以在这里阅读:https : //kotlinlang.org/docs/reference/null-safety.html#the--operator
| 归档时间: |
|
| 查看次数: |
9685 次 |
| 最近记录: |