6

Kotlin で CompletableFuture 例外を処理しようとしていますが、適切なパラメーターを指定する方法がわかりません。たとえば、次のようなものがあります。

CompletableFuture.runAsync { "sr" } .exceptionally{e -> {}}

しかし、コンパイラは不平を言いCannot infer type parameter Tます。

これを修正するにはどうすればよいですか?

4

1 に答える 1

6

いくつかのKotlinマジックのためにトリッキーになる非常にトリッキーなケース:)

問題の直接的な解決策は、次のコードです。

CompletableFuture.runAsync {"sr"}
   .exceptionally({e -> null})

詳細な説明は次のとおりです。

runAsyncメソッドは を受け入れます。これRunnableは、実行後に を返すことを意味しVoidます。メソッドに渡される関数はexceptionally、のジェネリック パラメータと一致する必要があるため、この特定のケースでは、明示的CompletableFutureに返すことでコンパイラを支援する必要があります。null

したがって、以下は問題なくコンパイルされます。

CompletableFuture.runAsync {"sr"}
 .exceptionally({null})

CompletableFuture.runAsync {}
 .exceptionally({null})

最初のケースでは、「sr」文字列は単純に無視され、返されませrunAsyncRunnable

あなたはおそらく次のようなことをしたいと思っていました:

 CompletableFuture.supplyAsync {"sr"}
   .exceptionally({"sr_exceptional"})

また:

CompletableFuture.supplyAsync {"sr"}
  .exceptionally({e -> "sr_exceptional"})
于 2016-11-14T17:06:06.733 に答える