Kotlin null传播语法不起作用



我试图安全地调用一些回调属性,但IDE/编译器抱怨语法问题。

引用具有可为null的类型'(((->单位(?',使用显式"?"?。invoke(('进行类似函数的调用,而不是

属性声明:

var onTick: ((millisUntilFinished: Long) -> Unit)? = null
var onFinish: (() -> Unit)? = null

调用:

override fun onFinish() {
// syntax #1
if (parent.onFinish != null)
parent.onFinish()
}
override fun onTick(millisUntilFinished: Long) {
this.millisUntilFinished = millisUntilFinished
// syntax #2
parent?.onTick(millisUntilFinished)
}

规格:

  • 操作系统:Windows
  • Kotlin版本:1.4.0-rc
  • 安卓工作室:4.0.1

到目前为止,我的最佳选择是使用lateinit var,但在我的情况下,这似乎不合适。

Kotlin编译器旨在支持null安全性,即使在mutlithreading的情况下也是如此。不能保证在parent.onFinish != null检查之后,它在其他线程中没有设置为null,因此智能强制转换在这里不起作用。

正如编译器所说,使用显式的"?"?。invoke((':

parent.onFinish?.invoke()
parent.onTick?.invoke(millisUntilFinished)

最新更新