Class ModifierKit

java.lang.Object
org.miaixz.bus.core.xyz.ModifierKit

public class ModifierKit extends Object
类修饰符
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static boolean
    hasAllModifier(int modifiers, int... checkedModifiers)
    是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
    static boolean
    hasModifier(int modifiers, int... checkedModifiers)
    是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
    static boolean
    hasModifier(Class<?> clazz, EnumMap.Modifier... modifierTypes)
    是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
    static boolean
    hasModifier(Member member, EnumMap.Modifier... modifierTypes)
    是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
    static boolean
    isAbstract(Class<?> clazz)
    是否抽象类
    static boolean
    是否抽象成员
    static boolean
    isDefault(Method method)
    提供的方法是否为default方法
    static boolean
    isInterface(Class<?> clazz)
    是否抽象类
    static boolean
    isPrivate(Class<?> clazz)
    是否是private类
    static boolean
    isPrivate(Member member)
    是否是private成员,可检测包括构造、字段和方法
    static boolean
    isPublic(Class<?> clazz)
    是否是public类
    static boolean
    isPublic(Member member)
    是否是public成员,可检测包括构造、字段和方法
    static boolean
    isStatic(Class<?> clazz)
    是否是static类
    static boolean
    isStatic(Member member)
    是否是static成员,包括构造、字段或方法
    static boolean
    isSynthetic(Class<?> clazz)
    是否是合成类(由java编译器生成的)
    static boolean
    是否是合成成员(由java编译器生成的)
    static void
    设置final的field字段可以被修改 只要不会被编译器内联优化的 final 属性就可以通过反射有效的进行修改 -- 修改后代码中可使用到新的值;

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • ModifierKit

      public ModifierKit()
  • Method Details

    • hasModifier

      public static boolean hasModifier(Class<?> clazz, EnumMap.Modifier... modifierTypes)
      是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
      Parameters:
      clazz - 类,如果为null返回false
      modifierTypes - 修饰符枚举,如果为空返回false
      Returns:
      是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
    • hasModifier

      public static boolean hasModifier(Member member, EnumMap.Modifier... modifierTypes)
      是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
      Parameters:
      member - 构造、字段或方法,如果为null返回false
      modifierTypes - 修饰符枚举,如果为空返回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

      public static boolean isDefault(Method method)
      提供的方法是否为default方法
      Parameters:
      method - 方法,如果为null返回false
      Returns:
      是否为default方法
    • isPublic

      public static boolean isPublic(Member member)
      是否是public成员,可检测包括构造、字段和方法
      Parameters:
      member - 构造、字段或方法,如果为null返回false
      Returns:
      是否是public
    • isPublic

      public static boolean isPublic(Class<?> clazz)
      是否是public类
      Parameters:
      clazz - 类,如果为null返回false
      Returns:
      是否是public
    • isPrivate

      public static boolean isPrivate(Member member)
      是否是private成员,可检测包括构造、字段和方法
      Parameters:
      member - 构造、字段或方法,如果为null返回false
      Returns:
      是否是private
    • isPrivate

      public static boolean isPrivate(Class<?> clazz)
      是否是private类
      Parameters:
      clazz - 类,如果为null返回false
      Returns:
      是否是private类
    • isStatic

      public static boolean isStatic(Member member)
      是否是static成员,包括构造、字段或方法
      Parameters:
      member - 构造、字段或方法,如果为null返回false
      Returns:
      是否是static
    • isStatic

      public static boolean isStatic(Class<?> clazz)
      是否是static类
      Parameters:
      clazz - 类,如果为null返回false
      Returns:
      是否是static
    • isSynthetic

      public static boolean isSynthetic(Member member)
      是否是合成成员(由java编译器生成的)
      Parameters:
      member - 构造、字段或方法
      Returns:
      是否是合成字段
    • isSynthetic

      public static boolean isSynthetic(Class<?> clazz)
      是否是合成类(由java编译器生成的)
      Parameters:
      clazz - 类
      Returns:
      是否是合成
    • isAbstract

      public static boolean isAbstract(Member member)
      是否抽象成员
      Parameters:
      member - 构造、字段或方法
      Returns:
      是否抽象方法
    • isAbstract

      public static boolean isAbstract(Class<?> clazz)
      是否抽象类
      Parameters:
      clazz - 构造、字段或方法
      Returns:
      是否抽象类
    • isInterface

      public static boolean isInterface(Class<?> clazz)
      是否抽象类
      Parameters:
      clazz - 构造、字段或方法
      Returns:
      是否抽象类
    • removeFinalModify

      public static void removeFinalModify(Field field)
      设置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等异常包装