gpt4 book ai didi

Kotlin 习语 : null-safe conditional?

转载 作者:行者123 更新时间:2023-12-01 23:19:37 24 4
gpt4 key购买 nike

在 Java 中,我会这样写:

if (foo != null && foo.bar()) { ...

但是 Kotlin 提示说:

Smart cast to 'Foo' is impossible, because 'foo' is a mutable property that could have been changed by this time

认为这是在说我写的不是线程安全的。但是,在我使用它的上下文中,我知道它是因为它总是在单个线程上调用。

是的 foo 需要是可变的。我意识到将 foo 设为 val 可以解决这个问题,但这在这里是不可能的。

在 Kotlin 中处理这种情况的正确习惯用法是什么?

最佳答案

在这种情况下,空安全调用返回一个 bool 值?所以你可以检查它是否等于 true:

if (foo?.bar() == true) {

}

如果你需要在条件中使用非空的 foo,那么你可以使用常见的 ?.let 习惯用法。

foo?.let { foo ->
if (foo.bar()) {

}
}

如果您知道它只能在同一个线程上访问,则 !! 运算符在空检查后将是安全的,但是 ?.let 更惯用,因此更容易一旦您习惯阅读 Kotlin,请继续阅读。

关于Kotlin 习语 : null-safe conditional?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68275488/

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