0

我正在尝试扩展AbstractScheduledService.Scheduler,以便可以使用将初始延迟和周期存储在实例变量中的计划。

我正在尝试以下

public class ScannerScheduler extends AbstractScheduledService.Scheduler {

    @Override
    public final Future<?> schedule(AbstractService as, 
        ScheduledExecutorService ses, Runnable task) {
        Executors.newSingleThreadScheduledExecutor()
                 .scheduleAtFixedRate(task, 0, 1, TimeUnit.DAYS);
    }
}

但是编译器仍然抱怨:

ScannerScheduler 不是抽象的,不会覆盖 Scheduler 中的抽象方法 schedule(AbstractService,ScheduledExecutorService,Runnable)

我错过了什么?

4

2 回答 2

4

修改

该类Scheduler有一个private构造函数,这意味着您无法在不修改 Guava 库代码的情况下对其进行扩展。

因此,您需要采用 javadocs 建议的替代方法。

如果需要更大的灵活性,请考虑子类化CustomScheduler


(在这种情况下,编译错误有点误导......但最重要的是该extend方法不起作用。)

于 2013-08-13T07:23:01.893 回答
0

的方法Future<?> schedule(AbstractService service, ScheduledExecutorService executor, Runnable runnable)AbstractScheduledService最终的,因此不能被覆盖。

请参阅此处的第 393 行:https ://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java?r=d0f4023bd9027b21d9ef3f8077651ad0d2c2275d

从那里的代码来看,似乎Scheduler可以覆盖类中的相同方法签名,但不知道这是否对您有帮助:

new Scheduler() {
    @Override
    public Future<?> schedule(AbstractService service, ScheduledExecutorService executor,
        Runnable task) {
      return executor.scheduleWithFixedDelay(task, initialDelay, delay, unit);
    } 
  };
于 2013-08-13T07:32:33.683 回答