0

我正在尝试重新安排工作,并且我已经像这样定义了我的方法:

  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()Ta也是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 示例也没有编译(同样的错误)。

4

1 回答 1

0

好吧,只是通过将 oldTrigger 转换为 SimpleTrigger 使其工作......变成TriggerBuilder<? extends Trigger> getTriggerBuilder()TriggerBuilder<SimpleTrigger> getTriggerBuilder().

于 2015-08-27T15:44:06.767 回答