我真的很想创建一个 FutureTask 的子类,它有一个默认的无参数构造函数。特别是,我希望我的子类实现 Callable 接口(interface)并将其自身用作可调用对象。这样,MyFutureTask 的用户只需将 MyFutureTask 子类化,而不必实现他们自己的可调用对象并将其传递给 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 不允许在对 super
的调用中引用 this
。我无法实例化嵌套类,因为这也是不允许的。
有没有聪明(或不聪明)的方法可以做到这一点?
最佳答案
您可以使用组合和抽象类的创建来做到这一点。现在您的客户端已与可调用接口(interface)分离。
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;
}
}
关于java - 实现 Callable 的 FutureTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1468598/