From 372d8f85f063e3e5ef97afd98ffb6adb00603c66 Mon Sep 17 00:00:00 2001 From: rainful Date: Sun, 24 Aug 2025 22:11:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=9A=E8=BF=87=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E6=9D=A5=E4=BC=98=E5=8C=96=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E9=83=BD=E9=9C=80=E8=A6=81=E9=80=9A=E8=BF=87=E5=8F=8D=E5=B0=84?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9E=9A=E4=B8=BE=E5=AF=B9=E8=B1=A1=20?= =?UTF-8?q?=E9=A2=84=E4=BC=B0=E6=97=B6=E9=97=B4=E6=B6=88=E8=80=97=E5=87=8F?= =?UTF-8?q?=E5=B0=91=E5=88=B01/20=E5=88=B01/10=20=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E4=BD=BF=E7=94=A8ConcurrentHashMap=E6=9D=A5=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E5=B9=B6=E5=8F=91=E9=97=AE=E9=A2=98=20=E8=80=83=E8=99=91?= =?UTF-8?q?=E5=88=B0=E5=B7=A5=E5=85=B7=E7=B1=BB=E5=BA=94=E8=AF=A5=E4=B9=9F?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E6=9C=89=E9=82=A3=E4=B9=88=E9=AB=98=E7=9A=84?= =?UTF-8?q?=E5=B9=B6=E5=8F=91=E9=9C=80=E6=B1=82=20=E5=85=B6=E5=AE=9E?= =?UTF-8?q?=E4=B9=9F=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8=E6=99=AE=E9=80=9A?= =?UTF-8?q?map?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/core/util/EnumUtil.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/EnumUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/EnumUtil.java index 2ab529a268..75730634b2 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/EnumUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/EnumUtil.java @@ -8,6 +8,7 @@ import cn.hutool.core.map.MapUtil; import java.lang.reflect.Field; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.function.Predicate; @@ -243,6 +244,7 @@ public class EnumUtil { /** * 通过 某字段对应值 获取 枚举,获取不到时为 {@code defaultEnum} + * 通过缓存减少反射带来的影响 * * @param enumClass 枚举类 * @param predicate 条件 @@ -254,10 +256,14 @@ public class EnumUtil { if (null == enumClass || null == predicate) { return null; } - return Arrays.stream(enumClass.getEnumConstants()) + + Enum[] constants = CACHE.computeIfAbsent(enumClass, k -> enumClass.getEnumConstants()); + return Arrays.stream((E[]) constants) .filter(predicate).findFirst().orElse(defaultEnum); } + private static final Map, Enum[]> CACHE = new ConcurrentHashMap<>(); + /** * 通过 某字段对应值 获取 枚举,获取不到时为 {@code null} *

-- Gitee