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"})