-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パラメーターを受け入れるクラスにパブリック コンストラクターはありません。の代わりにCompletableFuture.supplyAsync()a を取る静的メソッドを使用することをお勧めします。SupplierCallable

CompletableFuture<A> future = CompletableFuture.supplyAsync(A::new);

またはラムダを使用:

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メソッドの 2 番目のパラメーターとしてcustom を指定できますsupplyAsyncCompletableFuture実行のためにすぐに送信せずに作成したい場合は、おそらくCompletableFuture.

于 2016-02-26T12:03:31.383 に答える