在Kotlin中使用CompletableFuture的异常方法

我正在尝试处理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"})