错误说" CompletableFuture(Object)在CompletableFuture"中有私人访问权限。实施CompletableFuture时

时间:2016-02-26 11:04:18

标签: intellij-idea java-8 completable-future

我正在实施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;
    }
}

我希望解决方案能够克服这个错误吗?

1 个答案:

答案 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