feat: 通过全局缓存来优化每次都需要通过反射获取枚举对象 预估时间消耗减少到1/20到1/10 同时使用ConcurrentHashMap来避免并发问题 考虑到工具类应该也不会有那么高的并发需求 其实也可以使用普通map

This commit is contained in:
rainful
2025-08-24 22:11:41 +08:00
parent f6ba182f52
commit 372d8f85f0

View File

@@ -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<Class<?>, Enum<?>[]> CACHE = new ConcurrentHashMap<>();
/**
* 通过 某字段对应值 获取 枚举,获取不到时为 {@code null}
* <p>