gpt4 book ai didi

java - 实现 Callable 的 FutureTask

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:42:30 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com