我正在尝试重新安排工作,并且我已经像这样定义了我的方法:
private def updateTriggerInterval(context: JobExecutionContext): Unit = {
val randomInterval = rand.nextInt((max - min) + 1) + min
val oldTrigger: Trigger = context.getTrigger
val up: TriggerBuilder[SimpleTrigger] = oldTrigger.getTriggerBuilder.withSchedule[SimpleTrigger](simpleSchedule()
.withIntervalInMinutes(randomInterval).repeatForever())
val scheduler = StdSchedulerFactory.getDefaultScheduler
scheduler.rescheduleJob(oldTrigger.getKey, up.build())
}
这给了我以下错误:
错误:(33, 55) 类型参数 [org.quartz.SimpleTrigger] 不符合方法 withSchedule 的类型参数边界 [SBT <: ?0] val up = oldTrigger.getTriggerBuilder.withScheduleSimpleTrigger.build()
现在看签名withSchedule
:
public <SBT extends T> TriggerBuilder<SBT> withSchedule(ScheduleBuilder<SBT> schedBuilder)
T
是类的类型参数,withSchedule
它看起来像class TriggerBuilder<T extends Trigger>
. soT
应该由返回的实例的类型参数定义getTriggerBuilder
,这里应该是TriggerBuilder<SimpleTrigger> getTriggerBuilder()
,T
a也是SimpleTrigger
。在Trigger
接口getTriggerBuilder
中是这样定义的: TriggerBuilder<? extends Trigger> getTriggerBuilder()
。simpleSchedule
返回一个SimpleScheduleBuilder
(扩展ScheduleBuilder<SimpleTrigger>
)。
我在这里的理解是SBT
(即SimpleTrigger
,如果我们查看错误)应该扩展一个扩展类Trigger
。这里的问题是我们有SimpleTrigger <: SimpleTrigger
。完全不确定我读对了。
如果我不输入withSchedule
,我最终会遇到同样的错误,再加上这个:
错误:(37, 46) 类型不匹配;发现: org.quartz.SimpleScheduleBuilder 需要: org.quartz.ScheduleBuilder[SBT] .withIntervalInMinutes(randomInterval).repeatForever)
^
有人可以帮我吗?作为记录,官方 Quartz 示例也没有编译(同样的错误)。