我真的想創建一個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