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方法接受 a Runnable,这意味着执行后它将返回Void。传递给exceptionally方法的函数必须匹配 the 的泛型参数,CompletableFuture所以在这种特殊情况下,您需要通过null显式返回来帮助编译器。

因此,以下将毫无问题地编译:

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

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

在第一种情况下,“sr”字符串将被忽略并且不会返回,因为runAsync接受 a Runnable

您可能想做类似的事情:

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

或者:

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