实现Callable的FutureTask

时间:2009-09-23 21:26:57

标签: java

我真的想创建一个FutureTask的子类,它有一个默认的无参数构造函数。特别是,我希望我的子类实现Callable接口并将其自身用作callable。这样,MyFutureTask的用户可以只是MyFutureTask的子类,而不必实现自己的callable并将其传递给FutureTask的实例。

以下是一般概念:

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不允许在this的调用中引用super。我无法实例化嵌套类,因为这也是不允许的。

我可以做一个聪明(或非聪明)的方式吗?

1 个答案:

答案 0 :(得分:2)

您可以使用合成和创建抽象类来完成此操作。现在,您的客户端与可调用接口分离。

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public abstract class MyFutureClass<V> implements Callable<V> {

private final FutureTask<V> futureTask;

public MyFutureClass() {
    futureTask = new FutureTask<V>(this);
}

@Override
public V call() throws Exception {
    return myCall();
}

protected abstract V myCall();

public FutureTask<V> getFutureTask() {
    return futureTask;
}
}