fix bean bug

This commit is contained in:
Looly 2020-10-21 13:12:02 +08:00
parent e2f3a3b622
commit 4e46606e60
4 changed files with 17 additions and 19 deletions

View File

@ -11,6 +11,7 @@
### Bug修复
* 【core 】 修复ChineseDate没有忽略时分秒导致计算错误问题issue#I1YW12@Gitee
* 【core 】 修复FileUtil中copyFile方法断言判断参数传递错误issue#I1Z2NY@Gitee
* 【core 】 修复BeanDesc读取父类属性覆盖子类属性导致的问题pr#1175@Github
-------------------------------------------------------------------------------------------------------------

View File

@ -146,9 +146,8 @@ public class BeanDesc implements Serializable {
if (false == ModifierUtil.isStatic(field)) {
//只针对非static属性
prop = createProp(field, methods);
PropDesc finalProp = prop;
// 只有不存在时才放入防止父类属性覆盖子类属性
this.propMap.putIfAbsent(prop.getFieldName(), finalProp);
this.propMap.putIfAbsent(prop.getFieldName(), prop);
}
}
return this;

View File

@ -139,7 +139,7 @@ public class ReflectUtil {
}
/**
* 查找指定类中的所有字段包括非public字段也包括父类和Object类的字段 字段不存在则返回<code>null</code>
* 查找指定类中的指定name的字段包括非public字段也包括父类和Object类的字段 字段不存在则返回<code>null</code>
*
* @param beanClass 被查找字段的类,不能为null
* @param name 字段名
@ -148,26 +148,20 @@ public class ReflectUtil {
*/
public static Field getField(Class<?> beanClass, String name) throws SecurityException {
final Field[] fields = getFields(beanClass);
if (ArrayUtil.isNotEmpty(fields)) {
for (Field field : fields) {
if ((name.equals(getFieldName(field)))) {
return field;
}
}
}
return null;
return ArrayUtil.firstMatch((field)->name.equals(getFieldName(field)), fields);
}
/**
* 获取指定类中字段名和字段对应的Map包括其父类中的字段
* 获取指定类中字段名和字段对应的有序Map包括其父类中的字段<br>
* 如果子类与父类中存在同名字段则这两个字段同时存在子类字段在前父类字段在后
*
* @param beanClass
* @return 字段名和字段对应的Map
* @return 字段名和字段对应的Map有序
* @since 5.0.7
*/
public static Map<String, Field> getFieldMap(Class<?> beanClass) {
final Field[] fields = getFields(beanClass);
final HashMap<String, Field> map = MapUtil.newHashMap(fields.length);
final HashMap<String, Field> map = MapUtil.newHashMap(fields.length, true);
for (Field field : fields) {
map.put(field.getName(), field);
}
@ -175,7 +169,8 @@ public class ReflectUtil {
}
/**
* 获得一个类中所有字段列表包括其父类中的字段
* 获得一个类中所有字段列表包括其父类中的字段<br>
* 如果子类与父类中存在同名字段则这两个字段同时存在子类字段在前父类字段在后
*
* @param beanClass
* @return 字段列表
@ -192,14 +187,15 @@ public class ReflectUtil {
}
/**
* 获得一个类中所有字段列表直接反射获取无缓存
* 获得一个类中所有字段列表直接反射获取无缓存<br>
* 如果子类与父类中存在同名字段则这两个字段同时存在子类字段在前父类字段在后
*
* @param beanClass
* @param withSuperClassFieds 是否包括父类的字段列表
* @param withSuperClassFields 是否包括父类的字段列表
* @return 字段列表
* @throws SecurityException 安全检查异常
*/
public static Field[] getFieldsDirectly(Class<?> beanClass, boolean withSuperClassFieds) throws SecurityException {
public static Field[] getFieldsDirectly(Class<?> beanClass, boolean withSuperClassFields) throws SecurityException {
Assert.notNull(beanClass);
Field[] allFields = null;
@ -212,7 +208,7 @@ public class ReflectUtil {
} else {
allFields = ArrayUtil.append(allFields, declaredFields);
}
searchType = withSuperClassFieds ? searchType.getSuperclass() : null;
searchType = withSuperClassFields ? searchType.getSuperclass() : null;
}
return allFields;

View File

@ -465,6 +465,8 @@ public class BeanUtilTest {
@Data
public static class HllFoodEntity implements Serializable {
private static final long serialVersionUID = 1L;
private String bookId;
@Alias("code")
private String code2;