我真的想创建一个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
。我无法实例化嵌套类,因为这也是不允许的。
我可以做一个聪明(或非聪明)的方式吗?
答案 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;
}
}