gpt4 book ai didi

kotlin - 如何将可为空类型传递给采用非空类型的函数?

转载 作者:行者123 更新时间:2023-12-02 06:56:41 25 4
gpt4 key购买 nike

如果我在通过之前进行空检查,这可能吗?例如:

fun main(args: Array<String>) {
var num: Int? = null
// Stuff happens that might make num not null
...
if (num != null) doSomething(num)
}

fun doSomething(number: Int) {
...
}

我不明白为什么编译器不允许我传递可空值,即使我先检查它不是空值。谁能解释一下?

最佳答案

注意:从编译器版本 1.0 beta 开始,有问题的代码按原样工作

编译器可以判断变量是否在检查和使用之间发生了变化,至少在像这个问题这样的局部变量的情况下,以及在其他一些情况下。见 Jayson's answer详情。

http://kotlinlang.org/docs/reference/null-safety.html#checking-for-null-keyword--in-conditions

The compiler tracks the information about the [null] check ... this only works where b is immutable (i.e. a local val or a member val which has a backing field and is not overridable), because otherwise it might happen that b changes to null after the check.



所以这样的事情应该有效:
fun main(args: Array<String>) {
var num: Int? = null
// Stuff happens that might make num not null
...
val numVal: Int? = num
if (numVal != null) doSomething(numVal)
}

fun doSomething(number: Int) {
...
}

当然,最好以这样的方式重写“事情发生”,您可以制作 numval首先。

关于kotlin - 如何将可为空类型传递给采用非空类型的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29831764/

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