Package org.miaixz.bus.core.xyz
Class ModifierKit
java.lang.Object
org.miaixz.bus.core.xyz.ModifierKit
类修饰符
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic booleanhasAllModifier(int modifiers, int... checkedModifiers) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)static booleanhasModifier(int modifiers, int... checkedModifiers) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)static booleanhasModifier(Class<?> clazz, EnumMap.Modifier... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)static booleanhasModifier(Member member, EnumMap.Modifier... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)static booleanisAbstract(Class<?> clazz) 是否抽象类static booleanisAbstract(Member member) 是否抽象成员static boolean提供的方法是否为default方法static booleanisInterface(Class<?> clazz) 是否抽象类static boolean是否是private类static boolean是否是private成员,可检测包括构造、字段和方法static boolean是否是public类static boolean是否是public成员,可检测包括构造、字段和方法static boolean是否是static类static boolean是否是static成员,包括构造、字段或方法static booleanisSynthetic(Class<?> clazz) 是否是合成类(由java编译器生成的)static booleanisSynthetic(Member member) 是否是合成成员(由java编译器生成的)static voidremoveFinalModify(Field field) 设置final的field字段可以被修改 只要不会被编译器内联优化的 final 属性就可以通过反射有效的进行修改 -- 修改后代码中可使用到新的值;
-
Constructor Details
-
ModifierKit
public ModifierKit()
-
-
Method Details
-
hasModifier
是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)- Parameters:
clazz- 类,如果为null返回falsemodifierTypes- 修饰符枚举,如果为空返回false- Returns:
- 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
-
hasModifier
是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)- Parameters:
member- 构造、字段或方法,如果为null返回falsemodifierTypes- 修饰符枚举,如果为空返回false- Returns:
- 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
-
hasModifier
public static boolean hasModifier(int modifiers, int... checkedModifiers) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)- Parameters:
modifiers- 类、构造、字段或方法的修饰符checkedModifiers- 需要检查的修饰符,如果为空返回false- Returns:
- 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
-
hasAllModifier
public static boolean hasAllModifier(int modifiers, int... checkedModifiers) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)- Parameters:
modifiers- 类、构造、字段或方法的修饰符checkedModifiers- 需要检查的修饰符,如果为空返回false- Returns:
- 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
-
isDefault
提供的方法是否为default方法- Parameters:
method- 方法,如果为null返回false- Returns:
- 是否为default方法
-
isPublic
是否是public成员,可检测包括构造、字段和方法- Parameters:
member- 构造、字段或方法,如果为null返回false- Returns:
- 是否是public
-
isPublic
是否是public类- Parameters:
clazz- 类,如果为null返回false- Returns:
- 是否是public
-
isPrivate
是否是private成员,可检测包括构造、字段和方法- Parameters:
member- 构造、字段或方法,如果为null返回false- Returns:
- 是否是private
-
isPrivate
是否是private类- Parameters:
clazz- 类,如果为null返回false- Returns:
- 是否是private类
-
isStatic
是否是static成员,包括构造、字段或方法- Parameters:
member- 构造、字段或方法,如果为null返回false- Returns:
- 是否是static
-
isStatic
是否是static类- Parameters:
clazz- 类,如果为null返回false- Returns:
- 是否是static
-
isSynthetic
是否是合成成员(由java编译器生成的)- Parameters:
member- 构造、字段或方法- Returns:
- 是否是合成字段
-
isSynthetic
是否是合成类(由java编译器生成的)- Parameters:
clazz- 类- Returns:
- 是否是合成
-
isAbstract
是否抽象成员- Parameters:
member- 构造、字段或方法- Returns:
- 是否抽象方法
-
isAbstract
是否抽象类- Parameters:
clazz- 构造、字段或方法- Returns:
- 是否抽象类
-
isInterface
是否抽象类- Parameters:
clazz- 构造、字段或方法- Returns:
- 是否抽象类
-
removeFinalModify
设置final的field字段可以被修改 只要不会被编译器内联优化的 final 属性就可以通过反射有效的进行修改 -- 修改后代码中可使用到新的值;以下属性,编译器会内联优化,无法通过反射修改:
- 基本类型 byte, char, short, int, long, float, double, boolean
- Literal String 类型(直接双引号字符串)
以下属性,可以通过反射修改:
- 基本类型的包装类 Byte、Character、Short、Long、Float、Double、Boolean
- 字符串,通过 new String("")实例化
- 自定义java类
// 示例,移除final修饰符 class JdbcDialects { private static final List<Number> dialects = new ArrayList<>(); } Field field = ReflectKit.getField(JdbcDialects.class, fieldName); ReflectKit.removeFinalModify(field); ReflectKit.setFieldValue(JdbcDialects.class, fieldName, dialects);JDK9+此方法抛出NoSuchFieldException异常,原因是除非开放,否则模块外无法访问属性
- Parameters:
field- 被修改的field,不可以为空- Throws:
InternalException- IllegalAccessException等异常包装
-