我,为什么下面投不工作极其混乱:
ScheduledThreadPoolExecutor timeoutControl = (ScheduledThreadPoolExecutor) Executors.newSingleThreadScheduledExecutor();
的ScheduledThreadPoolExecutor实现了ScheduledExecutorService的。 这是什么执行人点打电话,如果我不能以实际的课堂上使用它。
我使用的是错误的(可能),可能有人提供一些指导吗?
的问题是, Executors.newSingleThreadScheduledExecutor();
实际上不返回ScheduledThreadPoolExecutor
。
源代码的Executors
类:
public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
return new DelegatedScheduledExecutorService
(new ScheduledThreadPoolExecutor(1));
}
该Delegated...
类(有一个DelegatedExecutorService
太)只是过客所有调用底层的执行者,在ScheduledThreadPoolExecutor
在这种情况下。 在代码中的注释表明,这些类的整点是隐藏所有底层执行者可能具有非接口方法。
在任何情况下,更好的做法反正使用的接口,而不是对象的类版本你正在工作( List
而不是ArrayList
, ScheduledExecutorService
,而不是ScheduledThreadPoolExecutor
)。
如果你绝对需要的可用功能ScheduledThreadPoolExecutor
,而不是在ScheduledExecutorService
,你可以使用的构造函数ScheduledThreadPoolExecutor
创建它的一个实例。
您应该只使用所返回的执行作为ScheduledExecutorService
,而不是将其强制转换为ScheduledThreadPoolExecutor
。
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
为了简化:
实现一个接口的类可以有其他的方法和字段,界面没有。 在这种情况下,该方法返回的接口,所以你不能这样垂头丧气实现类。