我真的想创建一个FutureTask的子类,它具有默认的无参数构造函数。特别是,我希望我的子类实现Callable接口并使用它自己作为可调用对象。这样,MyFutureTask的用户可以继承MyFutureTask的子类,而不必实现自己的可调用方法,并将它传递给FutureTask的一个实例。FutureTask实现Callable
这里的总体思路:
public abstract class MyFutureTask<Result> extends FutureTask<Result> implements Callable<Result> {
public MyFutureTask() {
super(/*XXX*/);
}
public abstract Result call() throws Exception;
}
的问题是,我能放在XXX
? FutureTask需要Callable,但我无法通过this
,因为java不允许在super
的调用中引用this
。我不能实例化一个嵌套类,因为这也是不允许的。
有没有一种聪明(或非聪明)的方式可以做到这一点?
我还不清楚你为什么要这样做?您通常不会自己创建FutureTasks,而是通过ScheduledExecutorService将您的Callable变成FutureTask。 – skaffman 2009-09-24 07:38:39
如果你想实现可取消的计算,你将不得不自己做。 – MrWhite 2009-09-24 10:04:35
你问你怎么才能实现这个设计,但是我担心,即使你成功了,你的客户也会迷惑不解。他们调用MyFutureTask#call()的结果是否与RunnableFuture#run()和Future#get()之间的关系有关?你的call()函数是否等于run()跟get()? – seh 2009-11-22 00:46:28