我试图安全地调用一些回调属性,但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)