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