请考虑以下代码:
例
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
的默认值为null
for,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)
运算符!!
抛出一个KotlinNullPointerException
ifmessage
为 null。
你可以在这里阅读:https : //kotlinlang.org/docs/reference/null-safety.html#the--operator
归档时间: |
|
查看次数: |
9685 次 |
最近记录: |