diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java index 64081f220..8ba0feee0 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java @@ -153,7 +153,7 @@ public class ReflectUtil { /** * 获取指定类中字段名和字段对应的有序Map,包括其父类中的字段
- * 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。 + * 如果子类与父类中存在同名字段,则后者覆盖前者。 * * @param beanClass 类 * @return 字段名和字段对应的Map,有序 diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ReflectUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ReflectUtilTest.java index 51c06ae57..8af979421 100755 --- a/hutool-core/src/test/java/cn/hutool/core/util/ReflectUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ReflectUtilTest.java @@ -1,5 +1,6 @@ package cn.hutool.core.util; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.TimeInterval; import cn.hutool.core.date.Week; @@ -8,6 +9,7 @@ import cn.hutool.core.lang.test.bean.ExamInfoDict; import cn.hutool.core.util.ClassUtilTest.TestSubClass; import lombok.Data; import static org.junit.jupiter.api.Assertions.*; +import lombok.experimental.FieldNameConstants; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -18,6 +20,8 @@ import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; /** * 反射工具类单元测试 @@ -79,11 +83,39 @@ public class ReflectUtilTest { assertNotNull(privateField); } + @Test + public void getFieldMapTest() { + // 获取指定类中字段名和字段对应的有序Map,包括其父类中的字段 + // 如果子类与父类中存在同名字段,则后者覆盖前者。 + Map fieldMap = ReflectUtil.getFieldMap(TestSubUser.class); + assertEquals(3, fieldMap.size()); + } + @Test public void getFieldsTest() { // 能够获取到父类字段 - final Field[] fields = ReflectUtil.getFields(TestSubClass.class); + Field[] fields = ReflectUtil.getFields(TestSubClass.class); assertEquals(4, fields.length); + + // 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。 + fields = ReflectUtil.getFields(TestSubUser.class); + assertEquals(4, fields.length); + List idFieldList = Arrays.asList(fields).stream().filter(f -> Objects.equals(f.getName(), TestSubUser.Fields.id)).collect(Collectors.toList()); + Field firstIdField = CollUtil.getFirst(idFieldList); + assertEquals(true, Objects.equals(firstIdField.getDeclaringClass().getName(), TestSubUser.class.getName())); + } + + @Data + static class TestBaseEntity { + private Long id; + private String remark; + } + + @Data + @FieldNameConstants + static class TestSubUser extends TestBaseEntity { + private Long id; + private String name; } @Test