test(EnumUtil): 增加枚举静态初始化递归场景的单元测试

新增 SelfRefEnum 枚举和 getFieldValuesRecursiveTest 测试方法,
验证 fix issue#IDQYJK(修复枚举类静态初始化中调用 EnumUtil 导致 Recursive update 的问题)
This commit is contained in:
Busyliu
2026-03-02 05:05:27 +00:00
committed by Gitee
parent f8184b0087
commit 6d99a39857

View File

@@ -70,6 +70,20 @@ public class EnumUtilTest {
assertEquals("type1", enumMap.get("TEST1"));
}
/**
* 测试枚举类静态初始化中调用 EnumUtil 不会导致 Recursive update 异常
* fix issue#IDQYJK
*/
@Test
public void getFieldValuesRecursiveTest() {
// SelfRefEnum 在静态初始化时调用了 EnumUtil.getNames
// 修复前会抛出 IllegalStateException: Recursive update
// 修复后应正常返回结果
List<Object> values = EnumUtil.getFieldValues(SelfRefEnum.class, "label");
assertNotNull(values);
assertEquals(3, values.size());
}
public enum TestEnum{
TEST1("type1"), TEST2("type2"), TEST3("type3");
@@ -89,4 +103,24 @@ public class EnumUtilTest {
return this.name;
}
}
/**
* 静态初始化中使用 EnumUtil 的枚举,用于测试 fix issue#IDQYJK
*/
public enum SelfRefEnum {
A("labelA"), B("labelB"), C("labelC");
// 静态初始化块中调用 EnumUtil触发 ConcurrentHashMap.computeIfAbsent 的递归场景
static final List<String> NAMES = EnumUtil.getNames(SelfRefEnum.class);
private final String label;
SelfRefEnum(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
}
}