Kotlin で CompletableFuture 例外を処理しようとしていますが、適切なパラメーターを指定する方法がわかりません。たとえば、次のようなものがあります。
CompletableFuture.runAsync { "sr" }
.exceptionally{e -> {}}
しかし、コンパイラは不平を言いCannot infer type parameter Tます。
これを修正するにはどうすればよいですか?
Kotlin で CompletableFuture 例外を処理しようとしていますが、適切なパラメーターを指定する方法がわかりません。たとえば、次のようなものがあります。
CompletableFuture.runAsync { "sr" }
.exceptionally{e -> {}}
しかし、コンパイラは不平を言いCannot infer type parameter Tます。
これを修正するにはどうすればよいですか?
いくつかのKotlinマジックのためにトリッキーになる非常にトリッキーなケース:)
問題の直接的な解決策は、次のコードです。
CompletableFuture.runAsync {"sr"}
.exceptionally({e -> null})
詳細な説明は次のとおりです。
runAsyncメソッドは を受け入れます。これRunnableは、実行後に を返すことを意味しVoidます。メソッドに渡される関数はexceptionally、のジェネリック パラメータと一致する必要があるため、この特定のケースでは、明示的CompletableFutureに返すことでコンパイラを支援する必要があります。null
したがって、以下は問題なくコンパイルされます。
CompletableFuture.runAsync {"sr"}
.exceptionally({null})
CompletableFuture.runAsync {}
.exceptionally({null})
最初のケースでは、「sr」文字列は単純に無視され、返されませrunAsyncんRunnable。
あなたはおそらく次のようなことをしたいと思っていました:
CompletableFuture.supplyAsync {"sr"}
.exceptionally({"sr_exceptional"})
また:
CompletableFuture.supplyAsync {"sr"}
.exceptionally({e -> "sr_exceptional"})