我正在实施CompletableFuture
,如下所示,但收到错误
中拥有私人访问权限
CompletableFuture(Object)
在CompletableFuture
public CompletableFuture<A> init(B b) {
C c = new C();
CompletableFuture<A> future = new CompletableFuture<A>(c);
return future;
}
public class C implements Callable<A> {
public A call() throws Exception {
A a = new A();
return a;
}
}
我希望解决方案能够克服这个错误吗?
答案 0 :(得分:1)
CompletableFuture
类中没有接受参数的公共构造函数。最好使用CompletableFuture.supplyAsync()
静态方法,该方法需要Supplier
而不是Callable
:
CompletableFuture<A> future = CompletableFuture.supplyAsync(A::new);
或者使用lambda:
CompletableFuture<A> future = CompletableFuture.supplyAsync(() -> new A());
请注意,如果A
构造函数抛出已检查的异常,则应该处理它,因为Supplier
接口不支持异常:
CompletableFuture<A> future = CompletableFuture.supplyAsync(() -> {
try { return new A(); }
catch(Exception ex) { throw new RuntimeException(ex);}
});
最后请注意supplyAsync
不仅会创建CompletableFuture
,还会安排它在公共线程池中执行。您可以将自定义Executor
指定为supplyAsync
方法的第二个参数。如果您想创建CompletableFuture
而不立即发送以执行,那么您可能不需要CompletableFuture
。