gpt4 book ai didi

kotlin - 如何避免 "?.let"的嵌套「空检查」?

转载 作者:行者123 更新时间:2023-12-03 15:29:05 33 4
gpt4 key购买 nike

让 kotlin 帮助我避免一些 if(null?) doSomething。

但是我有一个问题。

A是对象的字段,B是对象A的字段,可以为nullbale。

他们的代码是这样的。

class Obj {
var a : A?
}

class A {
var b : B?
}

我知道我可以通过 double let 做到这一点:

A?.let { 
it.B.let {
// a must nonnull
}
}
A?.B?.let {
// how to use A ,without null check again?
}

最佳答案

有一些扩展函数可以实现您正在寻找的东西,您可以在此线程中找到它们 https://discuss.kotlinlang.org/t/kotlin-null-check-for-multiple-nullable-vars/1946

但老实说,您最好只在此处使用基本的 if 检查,如果变量是可变的,您可以先将其分配给 val

val _a = a
val _b = b
if (_a != null && _b != null) {

}

编辑:如果您仍然真的想使用 let,对于这种情况,您可以创建一对并使用 takeIf

(a to b)
.takeIf { (a, b) ->
a != null && b != null
}
?.let { (a, b) ->

}

但是编译器不会将值智能转换为非空值,因此您仍然必须对它们执行非空 (!!) 断言。

关于kotlin - 如何避免 "?.let"的嵌套「空检查」?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56764419/

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