From 65ba22d34bea99296e5702080a16019b727f099b Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 16 May 2024 15:02:34 +0800 Subject: [PATCH] addd null check --- .../dromara/hutool/core/bean/BeanDesc.java | 30 ++++++------- .../hutool/core/reflect/ModifierUtil.java | 44 +++++++++---------- 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanDesc.java b/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanDesc.java index ae6b75b84..af7a4c167 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanDesc.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanDesc.java @@ -164,15 +164,14 @@ public class BeanDesc implements Serializable { */ private void initForRecord() { final Method[] getters = MethodUtil.getPublicMethods(this.beanClass, method -> 0 == method.getParameterCount()); - for (final Field field : FieldUtil.getFields(this.beanClass)) { - // 排除静态属性和对象子类 - if (!ModifierUtil.isStatic(field) && !FieldUtil.isOuterClassField(field)) { - for (final Method getter : getters) { - if (field.getName().equals(getter.getName())) { - //record对象,getter方法与字段同名 - final PropDesc prop = new PropDesc(field, getter, null); - this.propMap.putIfAbsent(prop.getFieldName(), prop); - } + // 排除静态属性和对象子类 + final Field[] fields = FieldUtil.getFields(this.beanClass, field -> !ModifierUtil.isStatic(field) && !FieldUtil.isOuterClassField(field)); + for (final Field field : fields) { + for (final Method getter : getters) { + if (field.getName().equals(getter.getName())) { + //record对象,getter方法与字段同名 + final PropDesc prop = new PropDesc(field, getter, null); + this.propMap.putIfAbsent(prop.getFieldName(), prop); } } } @@ -183,14 +182,13 @@ public class BeanDesc implements Serializable { */ private void initForBean() { 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; - for (final Field field : FieldUtil.getFields(this.beanClass)) { - // 排除静态属性和对象子类 - if (!ModifierUtil.isStatic(field) && !FieldUtil.isOuterClassField(field)) { - prop = createProp(field, gettersAndSetters); - // 只有不存在时才放入,防止父类属性覆盖子类属性 - this.propMap.putIfAbsent(prop.getFieldName(), prop); - } + for (final Field field : fields) { + prop = createProp(field, gettersAndSetters); + // 只有不存在时才放入,防止父类属性覆盖子类属性 + this.propMap.putIfAbsent(prop.getFieldName(), prop); } } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ModifierUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ModifierUtil.java index 32a5c79b4..83996e543 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ModifierUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ModifierUtil.java @@ -108,8 +108,8 @@ public class ModifierUtil { /** * 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true) * - * @param clazz 类 - * @param modifierTypes 修饰符枚举 + * @param clazz 类,如果为{@code null}返回{@code false} + * @param modifierTypes 修饰符枚举,如果为空返回{@code false} * @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false */ public static boolean hasModifier(final Class clazz, final ModifierType... modifierTypes) { @@ -122,8 +122,8 @@ public class ModifierUtil { /** * 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true) * - * @param member 构造、字段或方法 - * @param modifierTypes 修饰符枚举 + * @param member 构造、字段或方法,如果为{@code null}返回{@code false} + * @param modifierTypes 修饰符枚举,如果为空返回{@code false} * @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false */ public static boolean hasModifier(final Member member, final ModifierType... modifierTypes) { @@ -136,74 +136,74 @@ public class ModifierUtil { /** * 提供的方法是否为default方法 * - * @param method 方法 + * @param method 方法,如果为{@code null}返回{@code false} * @return 是否为default方法 * @since 6.0.0 */ public static boolean isDefault(final Method method) { - return method.isDefault(); + return null != method && method.isDefault(); } /** * 是否是public成员,可检测包括构造、字段和方法 * - * @param member 构造、字段或方法 + * @param member 构造、字段或方法,如果为{@code null}返回{@code false} * @return 是否是public */ public static boolean isPublic(final Member member) { - return Modifier.isPublic(member.getModifiers()); + return null != member && Modifier.isPublic(member.getModifiers()); } /** * 是否是public类 * - * @param clazz 类 + * @param clazz 类,如果为{@code null}返回{@code false} * @return 是否是public */ public static boolean isPublic(final Class clazz) { - return Modifier.isPublic(clazz.getModifiers()); + return null != clazz && Modifier.isPublic(clazz.getModifiers()); } /** * 是否是private成员,可检测包括构造、字段和方法 * - * @param member 构造、字段或方法 + * @param member 构造、字段或方法,如果为{@code null}返回{@code false} * @return 是否是private */ public static boolean isPrivate(final Member member) { - return Modifier.isPrivate(member.getModifiers()); + return null != member && Modifier.isPrivate(member.getModifiers()); } /** * 是否是private类 * - * @param clazz 类 + * @param clazz 类,如果为{@code null}返回{@code false} * @return 是否是private类 */ public static boolean isPrivate(final Class clazz) { - return Modifier.isPrivate(clazz.getModifiers()); + return null != clazz && Modifier.isPrivate(clazz.getModifiers()); } /** * 是否是static成员,包括构造、字段或方法 * - * @param member 构造、字段或方法 + * @param member 构造、字段或方法,如果为{@code null}返回{@code false} * @return 是否是static * @since 4.0.8 */ public static boolean isStatic(final Member member) { - return Modifier.isStatic(member.getModifiers()); + return null != member && Modifier.isStatic(member.getModifiers()); } /** * 是否是static类 * - * @param clazz 类 + * @param clazz 类,如果为{@code null}返回{@code false} * @return 是否是static * @since 4.0.8 */ 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 */ 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 */ 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 */ 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 */ public static boolean isAbstract(final Class clazz) { - return Modifier.isAbstract(clazz.getModifiers()); + return null != clazz && Modifier.isAbstract(clazz.getModifiers()); } /**