-1

我正在执行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;
    }
}

我希望解决方案来克服这个错误?

4

1 回答 1

3

CompletableFuture类中没有接受参数的公共构造函数。最好使用采用 a而不是的CompletableFuture.supplyAsync()静态方法:SupplierCallable

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,还会安排它在公共线程池中执行。您可以将自定义指定ExecutorsupplyAsync方法的第二个参数。如果您想创建CompletableFuture而不立即发送执行,那么您可能不需要CompletableFuture.

于 2016-02-26T12:03:31.383 回答