java如何扩展AbstractScheduledService。调度程序
我试图扩展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 is not abstract and does not override abstract method schedule(AbstractService,ScheduledExecutorService,Runnable) in Scheduler
我错过了什么
# 1 楼答案
修订版
Scheduler
类有一个private
构造函数,这意味着如果不修改Guava库代码,就无法扩展它因此,您需要采用javadocs建议的替代方法
(在这种情况下,编译错误有点误导……但底线是
extend
方法不起作用。)# 2 楼答案
AbstractScheduledService
的方法Future<?> schedule(AbstractService service, ScheduledExecutorService executor, Runnable runnable)
是最终的,因此不能被重写参见第393行:https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java?r=d0f4023bd9027b21d9ef3f8077651ad0d2c2275d
从那里的代码来看,类
Scheduler
中的相同方法签名似乎可以被重写,但不知道这是否有助于您: