CompletableFuture异常完成实例构建是否有简洁单行官方API?
关于CompletableFuture异常完成实例的单行写法问题
你完全没看错——JDK官方的CompletableFuture API在Java 8版本里确实没有提供直接生成异常完成实例的单行便捷方法,这确实是个让不少开发者头疼的小痛点。
咱们先明确现状:
- 构建正常完成的CompletableFuture确实只需要一行:
return CompletableFuture.completedFuture(result); - 但在Java 8里,要构建异常完成的实例,真的只能像你写的那样分三步:
CompletableFuture<T> res = new CompletableFuture<>(); res.completeExceptionally(theCause); return res;
不过好消息是,这个问题在Java 9及以后的版本里已经被官方解决了!JDK 9为CompletableFuture新增了failedFuture(Throwable ex)静态方法,现在你可以用一行代码直接生成异常完成的实例:
return CompletableFuture.failedFuture(theCause);
如果你的项目还停留在Java 8环境,那确实只能自己封装一个工具方法(就像你说的那样),比如:
public static <T> CompletableFuture<T> failedFuture(Throwable cause) { CompletableFuture<T> future = new CompletableFuture<>(); future.completeExceptionally(cause); return future; }
至于为什么Java 8里官方没提供这个方法,大概率是早期API设计时的疏漏——毕竟正常完成的场景确实比异常完成更常见,但从开发者的实际使用体验来说,这种不对称的设计确实不够友好,也难怪你会觉得困扰。
内容的提问来源于stack exchange,提问作者Oleg Sklyar
相关产品推荐
相关产品推荐

