作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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/
场景如下: 我将我的应用程序运行所需的几个 .xml(某种配置)文件捆绑在一个 .jar 文件中。 jar 文件具有以下结构: settings-1.0.0.jar ˪ resources/ ˪
我是一名优秀的程序员,十分优秀!