我有一个方法,它结合了另外两种方法的结果,一种是同步的,如果出了问题会引发异常,另一种会返回可完成的未来,如果出了问题则以异常结束。我希望我的方法的使用者不必在两个不同的地方处理捕获同步和异步异常,是否有一种体面的方法可以将它们组合为一个异常输出?
答案 0 :(得分:3)
如果您希望外部方法返回一个CompletableFuture
,那么通常最好总是 返回一个CompletableFuture
-不抛出并且不返回空值。
这样,调用方只需处理一条路径中的异常或空值即可。
当外部方法进行同步调用时,请确保它在try
块中,捕获任何异常并为此返回异常完成的CompletableFuture
。
如果您使用的是Java 9或更高版本,则可以使用CompletableFuture.failedFuture
来使错误将来发生。否则,您可能应该创建一个辅助方法,该方法可以创造新的未来并立即调用completeExceptionally
。
答案 1 :(得分:0)
除了Matt所建议的将同步方法调用包装到CompletableFuture
中之外,还有CompletableFuture.thenCompose
用于构成两个独立期货的结果。