gpt4 book ai didi

Kotlin - 为什么我会得到 KotlinNullPointerException

转载 作者:IT老高 更新时间:2023-10-28 13:46:21 27 4
gpt4 key购买 nike

考虑以下代码:

示例

fun main(args: Array<String>) {
maybeWriteMessage()
}

fun maybeWriteMessage(message: String? = null) {
writeMessage(message!!)
}

fun writeMessage(message: String) {
println("Hello World")
}

输出

Exception in thread "main" kotlin.KotlinNullPointerException at com.series0ne.ApplicationKt.maybeWriteMessage(Application.kt:8) at com.series0ne.ApplicationKt.maybeWriteMessage$default(Application.kt:7) at com.series0ne.ApplicationKt.main(Application.kt:4)

这是因为我将 message!!(null,该死!)传递给一个不可为 null 的参数,但该参数从未被访问过。

问题

为什么即使没有访问空引用,Kotlin 也会强制抛出 KotlinNullPointerException

最佳答案

message: String? 表示message 可能是也可能不是null

由于您的函数 maybeWriteMessage 具有 message 的默认值 null 并且您正在调用 maybeWriteMessage()不指定 message - 调用 writeMessage(message!!) 时将使用默认值 (null)。

documentation 中所述!! 操作符在值为 null 时抛出异常。

安全触发 writeMessage 的一种方法是使用 .let:

fun maybeWriteMessage(message: String? = null) {
message?.let {
writeMessage(it)
}
}

关于Kotlin - 为什么我会得到 KotlinNullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50716294/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com