diff --git a/CHANGELOG.md b/CHANGELOG.md index 24f725873..84b31c3a4 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.33(2024-09-09) +# 5.8.33(2024-09-11) ### 🐣新特性 * 【core 】 SyncFinisher增加setExecutorService方法(issue#IANKQ1@Gitee) @@ -10,6 +10,7 @@ * 【core 】 用ArrayList重新实现权重随机类:WeightListRandom(pr#3720@Github) * 【crypto 】 SM2解密时,兼容GmSSL非压缩省略的04头的密文(issue#IAP1QJ@Gitee) * 【core 】 兼容NumberUtil.add方法传入整型自动类型转换为浮点类型的精度丢失问题(pr#3721@Github) +* 【core 】 ModifierUtil明确注释,并增加hasAllModifiers方法(issue#IAQ2U0@Gitee) ### 🐞Bug修复 * 【json 】 修复JSONConfig.setDateFormat设置后toBean无效问题(issue#3713@Github) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ModifierUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ModifierUtil.java index 5364d2f8b..4855c05ab 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ModifierUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ModifierUtil.java @@ -2,10 +2,7 @@ package cn.hutool.core.util; import cn.hutool.core.exceptions.UtilException; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; +import java.lang.reflect.*; /** * 修饰符工具类 @@ -93,10 +90,16 @@ public class ModifierUtil { } /** - * 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true) + * 类是否存在给定修饰符中的任意一个
+ * 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为: + * * - * @param clazz 类 - * @param modifierTypes 修饰符枚举 + * @param clazz 类,如果为{@code null}返回{@code false} + * @param modifierTypes 修饰符枚举,如果为空返回{@code false} * @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false */ public static boolean hasModifier(Class clazz, ModifierType... modifierTypes) { @@ -107,10 +110,16 @@ public class ModifierUtil { } /** - * 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true) + * 构造是否存在给定修饰符中的任意一个
+ * 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为: + * * - * @param constructor 构造方法 - * @param modifierTypes 修饰符枚举 + * @param constructor 构造,如果为{@code null}返回{@code false} + * @param modifierTypes 修饰符枚举,如果为空返回{@code false} * @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false */ public static boolean hasModifier(Constructor constructor, ModifierType... modifierTypes) { @@ -121,10 +130,16 @@ public class ModifierUtil { } /** - * 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true) + * 方法是否存在给定修饰符中的任意一个
+ * 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为: + * * - * @param method 方法 - * @param modifierTypes 修饰符枚举 + * @param method 方法,如果为{@code null}返回{@code false} + * @param modifierTypes 修饰符枚举,如果为空返回{@code false} * @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false */ public static boolean hasModifier(Method method, ModifierType... modifierTypes) { @@ -135,10 +150,16 @@ public class ModifierUtil { } /** - * 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true) + * 字段是否存在给定修饰符中的任意一个
+ * 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为: + * * - * @param field 字段 - * @param modifierTypes 修饰符枚举 + * @param field 构造、字段或方法,如果为{@code null}返回{@code false} + * @param modifierTypes 修饰符枚举,如果为空返回{@code false} * @return 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false */ public static boolean hasModifier(Field field, ModifierType... modifierTypes) { @@ -148,6 +169,51 @@ public class ModifierUtil { return 0 != (field.getModifiers() & modifiersToInt(modifierTypes)); } + // region ----- hasAll + + /** + * 类中是否同时存在所有给定修饰符
+ * 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为: + * + * + * @param clazz 类,如果为{@code null}返回{@code false} + * @param modifierTypes 修饰符枚举,如果为空返回{@code false} + * @return 是否同时存在所有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false + */ + public static boolean hasAllModifiers(final Class clazz, final ModifierType... modifierTypes) { + if (null == clazz || ArrayUtil.isEmpty(modifierTypes)) { + return false; + } + final int checkedModifiersInt = modifiersToInt(modifierTypes); + return checkedModifiersInt == (clazz.getModifiers() & checkedModifiersInt); + } + + /** + * 成员中是否同时存在所有给定修饰符
+ * 如定义修饰符为:{@code public static final},那么如果传入的modifierTypes为: + * + * + * @param member 构造、字段或方法,如果为{@code null}返回{@code false} + * @param modifierTypes 修饰符枚举,如果为空返回{@code false} + * @return 是否同时存在所有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false + */ + public static boolean hasAllModifiers(final Member member, final ModifierType... modifierTypes) { + if (null == member || ArrayUtil.isEmpty(modifierTypes)) { + return false; + } + final int checkedModifiersInt = modifiersToInt(modifierTypes); + return checkedModifiersInt == (member.getModifiers() & checkedModifiersInt); + } + // endregion + /** * 是否是Public字段 * @@ -273,7 +339,7 @@ public class ModifierUtil { *
  • 基本类型 byte, char, short, int, long, float, double, boolean
  • *
  • Literal String 类型(直接双引号字符串)
  • * - *

    以下属性,可以通过反射修改:

    + *

    以下属性,可以通过反射修改:

    *