gpt4 book ai didi

null - Kotlin 编译器无法确定变量在 do-while 循环中不可为空

转载 作者:行者123 更新时间:2023-12-02 12:03:42 27 4
gpt4 key购买 nike

我有以下方法。它的逻辑非常简单,如果设置了 right 则在它有一个值(非空)时调用 left 。当我按照以下方式编写它时,它会起作用。

fun goNext(from: Node): Node? {
var prev : Node = from
var next : Node? = from.right
if (next != null) {
prev = next
next = next.left
while (next != null) {
prev = next
next = next.left
}
}
return prev
}

相反,如果我尝试使用 do-while 循环缩短代码,则它不再智能转换 nextNode .它显示此错误:
Type mismatch.
Required: Node<T>
Found: Node<T>?

代码如下:
fun goNext(from: Node): Node? {
var prev : Node = from
var next : Node? = from.right
if (next != null) {
do {
prev = next // Error is here, even though next can't be null
next = next.left
} while (next != null)
}
return prev
}

最佳答案

编译器可能假设 next 可以在 if 语句和来自另一个线程的循环之间进行更改。
由于您可以确保 next 不为空,因此只需添加 !!在循环中使用它时到下一个:下一个!!

关于null - Kotlin 编译器无法确定变量在 do-while 循环中不可为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47490273/

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