addd null check

This commit is contained in:
Looly 2024-05-16 15:02:34 +08:00
parent 1106841210
commit 65ba22d34b
2 changed files with 36 additions and 38 deletions

View File

@ -164,15 +164,14 @@ public class BeanDesc implements Serializable {
*/ */
private void initForRecord() { private void initForRecord() {
final Method[] getters = MethodUtil.getPublicMethods(this.beanClass, method -> 0 == method.getParameterCount()); final Method[] getters = MethodUtil.getPublicMethods(this.beanClass, method -> 0 == method.getParameterCount());
for (final Field field : FieldUtil.getFields(this.beanClass)) { // 排除静态属性和对象子类
// 排除静态属性和对象子类 final Field[] fields = FieldUtil.getFields(this.beanClass, field -> !ModifierUtil.isStatic(field) && !FieldUtil.isOuterClassField(field));
if (!ModifierUtil.isStatic(field) && !FieldUtil.isOuterClassField(field)) { for (final Field field : fields) {
for (final Method getter : getters) { for (final Method getter : getters) {
if (field.getName().equals(getter.getName())) { if (field.getName().equals(getter.getName())) {
//record对象getter方法与字段同名 //record对象getter方法与字段同名
final PropDesc prop = new PropDesc(field, getter, null); final PropDesc prop = new PropDesc(field, getter, null);
this.propMap.putIfAbsent(prop.getFieldName(), prop); this.propMap.putIfAbsent(prop.getFieldName(), prop);
}
} }
} }
} }
@ -183,14 +182,13 @@ public class BeanDesc implements Serializable {
*/ */
private void initForBean() { private void initForBean() {
final Method[] gettersAndSetters = MethodUtil.getPublicMethods(this.beanClass, MethodUtil::isGetterOrSetterIgnoreCase); final Method[] gettersAndSetters = MethodUtil.getPublicMethods(this.beanClass, MethodUtil::isGetterOrSetterIgnoreCase);
// 排除静态属性和对象子类
final Field[] fields = FieldUtil.getFields(this.beanClass, field -> !ModifierUtil.isStatic(field) && !FieldUtil.isOuterClassField(field));
PropDesc prop; PropDesc prop;
for (final Field field : FieldUtil.getFields(this.beanClass)) { for (final Field field : fields) {
// 排除静态属性和对象子类 prop = createProp(field, gettersAndSetters);
if (!ModifierUtil.isStatic(field) && !FieldUtil.isOuterClassField(field)) { // 只有不存在时才放入防止父类属性覆盖子类属性
prop = createProp(field, gettersAndSetters); this.propMap.putIfAbsent(prop.getFieldName(), prop);
// 只有不存在时才放入防止父类属性覆盖子类属性
this.propMap.putIfAbsent(prop.getFieldName(), prop);
}
} }
} }

View File

@ -108,8 +108,8 @@ public class ModifierUtil {
/** /**
* 是否同时存在一个或多个修饰符可能有多个修饰符如果有指定的修饰符则返回true * 是否同时存在一个或多个修饰符可能有多个修饰符如果有指定的修饰符则返回true
* *
* @param clazz * @param clazz 如果为{@code null}返回{@code false}
* @param modifierTypes 修饰符枚举 * @param modifierTypes 修饰符枚举如果为空返回{@code false}
* @return 是否有指定修饰符如果有返回true否则false如果提供参数为null返回false * @return 是否有指定修饰符如果有返回true否则false如果提供参数为null返回false
*/ */
public static boolean hasModifier(final Class<?> clazz, final ModifierType... modifierTypes) { public static boolean hasModifier(final Class<?> clazz, final ModifierType... modifierTypes) {
@ -122,8 +122,8 @@ public class ModifierUtil {
/** /**
* 是否同时存在一个或多个修饰符可能有多个修饰符如果有指定的修饰符则返回true * 是否同时存在一个或多个修饰符可能有多个修饰符如果有指定的修饰符则返回true
* *
* @param member 构造字段或方法 * @param member 构造字段或方法如果为{@code null}返回{@code false}
* @param modifierTypes 修饰符枚举 * @param modifierTypes 修饰符枚举如果为空返回{@code false}
* @return 是否有指定修饰符如果有返回true否则false如果提供参数为null返回false * @return 是否有指定修饰符如果有返回true否则false如果提供参数为null返回false
*/ */
public static boolean hasModifier(final Member member, final ModifierType... modifierTypes) { public static boolean hasModifier(final Member member, final ModifierType... modifierTypes) {
@ -136,74 +136,74 @@ public class ModifierUtil {
/** /**
* 提供的方法是否为default方法 * 提供的方法是否为default方法
* *
* @param method 方法 * @param method 方法如果为{@code null}返回{@code false}
* @return 是否为default方法 * @return 是否为default方法
* @since 6.0.0 * @since 6.0.0
*/ */
public static boolean isDefault(final Method method) { public static boolean isDefault(final Method method) {
return method.isDefault(); return null != method && method.isDefault();
} }
/** /**
* 是否是public成员可检测包括构造字段和方法 * 是否是public成员可检测包括构造字段和方法
* *
* @param member 构造字段或方法 * @param member 构造字段或方法如果为{@code null}返回{@code false}
* @return 是否是public * @return 是否是public
*/ */
public static boolean isPublic(final Member member) { public static boolean isPublic(final Member member) {
return Modifier.isPublic(member.getModifiers()); return null != member && Modifier.isPublic(member.getModifiers());
} }
/** /**
* 是否是public类 * 是否是public类
* *
* @param clazz * @param clazz 如果为{@code null}返回{@code false}
* @return 是否是public * @return 是否是public
*/ */
public static boolean isPublic(final Class<?> clazz) { public static boolean isPublic(final Class<?> clazz) {
return Modifier.isPublic(clazz.getModifiers()); return null != clazz && Modifier.isPublic(clazz.getModifiers());
} }
/** /**
* 是否是private成员可检测包括构造字段和方法 * 是否是private成员可检测包括构造字段和方法
* *
* @param member 构造字段或方法 * @param member 构造字段或方法如果为{@code null}返回{@code false}
* @return 是否是private * @return 是否是private
*/ */
public static boolean isPrivate(final Member member) { public static boolean isPrivate(final Member member) {
return Modifier.isPrivate(member.getModifiers()); return null != member && Modifier.isPrivate(member.getModifiers());
} }
/** /**
* 是否是private类 * 是否是private类
* *
* @param clazz * @param clazz 如果为{@code null}返回{@code false}
* @return 是否是private类 * @return 是否是private类
*/ */
public static boolean isPrivate(final Class<?> clazz) { public static boolean isPrivate(final Class<?> clazz) {
return Modifier.isPrivate(clazz.getModifiers()); return null != clazz && Modifier.isPrivate(clazz.getModifiers());
} }
/** /**
* 是否是static成员包括构造字段或方法 * 是否是static成员包括构造字段或方法
* *
* @param member 构造字段或方法 * @param member 构造字段或方法如果为{@code null}返回{@code false}
* @return 是否是static * @return 是否是static
* @since 4.0.8 * @since 4.0.8
*/ */
public static boolean isStatic(final Member member) { public static boolean isStatic(final Member member) {
return Modifier.isStatic(member.getModifiers()); return null != member && Modifier.isStatic(member.getModifiers());
} }
/** /**
* 是否是static类 * 是否是static类
* *
* @param clazz * @param clazz 如果为{@code null}返回{@code false}
* @return 是否是static * @return 是否是static
* @since 4.0.8 * @since 4.0.8
*/ */
public static boolean isStatic(final Class<?> clazz) { public static boolean isStatic(final Class<?> clazz) {
return Modifier.isStatic(clazz.getModifiers()); return null != clazz && Modifier.isStatic(clazz.getModifiers());
} }
/** /**
@ -214,7 +214,7 @@ public class ModifierUtil {
* @since 5.6.3 * @since 5.6.3
*/ */
public static boolean isSynthetic(final Member member) { public static boolean isSynthetic(final Member member) {
return member.isSynthetic(); return null != member && member.isSynthetic();
} }
/** /**
@ -225,7 +225,7 @@ public class ModifierUtil {
* @since 5.6.3 * @since 5.6.3
*/ */
public static boolean isSynthetic(final Class<?> clazz) { public static boolean isSynthetic(final Class<?> clazz) {
return clazz.isSynthetic(); return null != clazz && clazz.isSynthetic();
} }
/** /**
@ -236,7 +236,7 @@ public class ModifierUtil {
* @since 5.7.23 * @since 5.7.23
*/ */
public static boolean isAbstract(final Member member) { public static boolean isAbstract(final Member member) {
return Modifier.isAbstract(member.getModifiers()); return null != member && Modifier.isAbstract(member.getModifiers());
} }
/** /**
@ -247,7 +247,7 @@ public class ModifierUtil {
* @since 5.7.23 * @since 5.7.23
*/ */
public static boolean isAbstract(final Class<?> clazz) { public static boolean isAbstract(final Class<?> clazz) {
return Modifier.isAbstract(clazz.getModifiers()); return null != clazz && Modifier.isAbstract(clazz.getModifiers());
} }
/** /**