gpt4 book ai didi

kotlin - 在可空类型的接收器上只允许安全 (?.) 或非空断言 (!!.) 调用

转载 作者:行者123 更新时间:2023-12-02 13:18:51 26 4
gpt4 key购买 nike

问题

我正在检查 null,但收到此错误:

// testNullCheck.kt
fun isNullOrEmpty(list: List<Int>?): Boolean {
if (list.isEmpty() || list == null ) {
return true
}else {
return false
}
}

fun main(args: Array<String>) {
val test: Boolean = isNullOrEmpty(
listOf<Int>()
)
println(test)
}

编译输出:

leetcode/kotlin [master●] » kotlinr testNullCheck.kt
Compiling, please wait...
testNullCheck.kt:2:11: error: only safe (?.) or non-null asserted (fg.) calls are allowed on a nullable receiver of type List<Int>?
if (list.isEmpty() || list == null ) {
^
1
2

问题:
  • 为什么编译器会提示?
  • if 语句操作数的顺序是否重要?
  • 最佳答案

    当您组合条件时,它们会从左到右进行评估。所以你必须在调用 isEmpty() 之前先检查 null在上面:

    fun isNullOrEmpty(list: List<Int>?): Boolean {
    if (list == null || list.isEmpty()) {
    return true
    }else {
    return false
    }
    }

    请注意,if 语句是多余的。只需这样做:
    fun isNullOrEmpty(list: List<Int>?): Boolean {
    return list == null || list.isEmpty()
    }

    我更改了您的函数名称,因为它与您正在检查的内容不一致。

    此外,已经有一个可以在可空列表上调用的内置函数:
    fun main(args: Array<String>) {
    val list: List<Any>? = null
    val test1: Boolean = list.isNullOrEmpty()
    println(test1)
    }

    关于kotlin - 在可空类型的接收器上只允许安全 (?.) 或非空断言 (!!.) 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60399702/

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