【发布时间】:2023-04-11 06:36:01
【问题描述】:
我目前正在尝试使用 ScheduledExecutorService 在 Kotlin 中启动计划任务,然后在类中存储对其 ScheduledFuture 的引用,以便稍后我可以在需要时使用其他函数取消该任务。
companion object {
val submitPool = Executors.newScheduledThreadPool(1)
var taskHandle : ??? // What type do I make this?
val newTask= object : Runnable {
override fun run() {
foo()
}
}
fun onStatusChange(connected : Boolean) {
if(connected) {
taskHandle = submitPool.scheduleWithFixedDelay(newTask, msUpdateRate, msUpdateRate, TimeUnit.MILLISECONDS)
}
} else {
taskHandle.cancel(true) // Cancel the task
}
}
}
我知道scheduleWithFixedDelay 函数返回ScheduledTask<?>,但在Kotlin 变量中,Android Studio 说它是ScheduledTask<*> 类型,我无法存储。如何将该结果作为变量存储在伴随对象上,以便稍后调用cancel()?
到目前为止,我尝试的任何操作都会引发类型不匹配的语法错误。我应该将结果转换为ScheduledTask<Unit> 吗?我对 Java 和 Kotlin 都非常陌生,尤其是 Star Projection <*> 的工作原理以及它与此的关系。
【问题讨论】: