From f5f96b66f5af5f262a4ba3dc4c8db5320ae4be17 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 30 Jul 2024 09:43:43 +0800 Subject: [PATCH] =?UTF-8?q?Opt=E5=A2=9E=E5=8A=A0ifFail?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../main/java/cn/hutool/core/lang/Opt.java | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86b5f025e..8d0aa2504 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ * 【core 】 CharSequenceUtil增加removeAllPrefix和removeAllSuffix方法(pr#3655@Github) * 【core 】 CharSequenceUtil增加stripAll方法(pr#3659@Github) * 【crypto 】 支持"RSA/ECB/OAEPWithSHA-1AndMGF1Padding"的RSA加解密(pr#3675@Github) +* 【core 】 Opt增加ifFail(pr#1239@Gitee) ### 🐞Bug修复 * 【core 】 修复因RFC3986理解有误导致的UrlPath处理冒号转义问题(issue#IAAE88@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java b/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java index 562bd8fc6..e793fd3a1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/Opt.java @@ -165,6 +165,28 @@ public class Opt { return null != this.exception; } + /** + * 如果包裹内容失败了,则执行传入的操作({@link Consumer#accept}) + * + *

例如执行有异常就打印结果 + *

{@code
+	 *     Opt.ofTry(() -> 1 / 0).ifFail(Console::log);
+	 * }
+ * + * @param action 你想要执行的操作 + * @return this + * @throws NullPointerException 如果包裹里的值存在,但你传入的操作为{@code null}时抛出 + */ + public Opt ifFail(final Consumer action) throws NullPointerException { + Objects.requireNonNull(action, "action is null"); + + if (isFail()) { + action.accept(this.exception); + } + + return this; + } + /** * 判断包裹里元素的值是否存在,存在为 {@code true},否则为{@code false} *