java - 实现 Callable 的 FutureTask

标签 java

我真的很想创建一个 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/

相关文章:

java - 如何使 Class.getMethod() 抛出 SecurityException

java - Zookeeper运行在两个节点上

java - 二进制 XML 文件行 #17 : Duplicate id , 标记为 null,或带有另一个 fragment 的父 ID

java - 是什么导致我的 LWJGL 程序帧速率低?

java - Perl Pipe 不重定向 Java 进程输出

java - 使用setContentView时多次定义函数

java - 如何获取从具有指定泛型的接口(interface)继承的所有类的列表(接口(interface)<具体类>)

java - 如何在 Java 中使用大于或小于日期 我有两个简单日期格式或字符串形式的日期

java - systemProperties和integrationGlobalProperties冲突

java - Java 不抛出异常