Class FieldKit

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

public class FieldKit extends Object
反射中Field字段工具类,包括字段获取和字段赋值。
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static Field[]
    getDeclaredFields(Class<?> beanClass, Predicate<Field> fieldPredicate)
    获得当前类声明的所有字段(包括非public字段),但不包括父类的字段
    static Field
    getDeclearField(Class<?> beanClass, String name)
    获取本类定义的指定名称的字段,包括私有字段,但是不包括父类字段
    static Field
    getField(Class<?> beanClass, String name)
    查找指定类中的指定name的字段(包括非public字段),也包括父类和Object类的字段, 字段不存在则返回null
    static Map<String,Field>
    getFieldMap(Class<?> beanClass)
    获取指定类中字段名和字段对应的有序Map,包括其父类中的字段 如果子类与父类中存在同名字段,则父类字段忽略
    static String
    获取字段名,如果存在Alias注解,读取注解的值作为名称
    static String
    getFieldName(Field field, boolean useAlias)
    获取字段名,可选是否使用Alias注解,读取注解的值作为名称
    static Field[]
    getFields(Class<?> beanClass)
    获得一个类中所有字段列表,包括其父类中的字段 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。
    static Field[]
    getFields(Class<?> beanClass, Predicate<Field> fieldPredicate)
    获得一个类中所有满足条件的字段列表,包括其父类中的字段 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。
    static Field[]
    getFieldsDirectly(Class<?> beanClass, boolean withSuperClassFields)
    获得一个类中所有字段列表,直接反射获取,无缓存 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。
    static Object[]
    获取所有字段的值
    static Object[]
    获取所有字段的值
    static Object
    getFieldValue(Object obj, Field field)
    获取字段值
    static Object
    getFieldValue(Object obj, String fieldName)
    获取字段值
    static Object
    获取静态字段值
    static boolean
    hasField(Class<?> beanClass, String name)
    查找指定类中是否包含指定名称对应的字段,包括所有字段(包括非public字段),也包括父类和Object类的字段
    static boolean
    是否为父类引用字段 当字段所在类是对象子类时(对象中定义的非static的class),会自动生成一个以"this$0"为名称的字段,指向父类对象
    static void
    setFieldValue(Object obj, Field field, Object value)
    设置字段值,如果值类型必须与字段类型匹配,会自动转换对象类型
    static void
    setFieldValue(Object obj, String fieldName, Object value)
    设置字段值
    static void
    setFieldValueExact(Object obj, Field field, Object value)
    设置字段值,传入的字段值必须和字段类型一致,否则抛出异常
    static void
    设置静态(static)字段值

    Methods inherited from class java.lang.Object

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

    • FieldKit

      public FieldKit()
  • Method Details

    • isOuterClassField

      public static boolean isOuterClassField(Field field)
      是否为父类引用字段 当字段所在类是对象子类时(对象中定义的非static的class),会自动生成一个以"this$0"为名称的字段,指向父类对象
      Parameters:
      field - 字段
      Returns:
      是否为父类引用字段
    • hasField

      public static boolean hasField(Class<?> beanClass, String name) throws SecurityException
      查找指定类中是否包含指定名称对应的字段,包括所有字段(包括非public字段),也包括父类和Object类的字段
      Parameters:
      beanClass - 被查找字段的类,不能为null
      name - 字段名
      Returns:
      是否包含字段
      Throws:
      SecurityException - 安全异常
    • getFieldName

      public static String getFieldName(Field field)
      获取字段名,如果存在Alias注解,读取注解的值作为名称
      Parameters:
      field - 字段
      Returns:
      字段名
    • getFieldName

      public static String getFieldName(Field field, boolean useAlias)
      获取字段名,可选是否使用Alias注解,读取注解的值作为名称
      Parameters:
      field - 字段
      useAlias - 是否检查并使用Alias注解
      Returns:
      字段名
    • getDeclearField

      public static Field getDeclearField(Class<?> beanClass, String name)
      获取本类定义的指定名称的字段,包括私有字段,但是不包括父类字段
      Parameters:
      beanClass - Bean的Class
      name - 字段名称
      Returns:
      字段对象,如果未找到返回null
    • getField

      public static Field getField(Class<?> beanClass, String name) throws SecurityException
      查找指定类中的指定name的字段(包括非public字段),也包括父类和Object类的字段, 字段不存在则返回null
      Parameters:
      beanClass - 被查找字段的类,不能为null
      name - 字段名
      Returns:
      字段
      Throws:
      SecurityException - 安全异常
    • getFieldMap

      public static Map<String,Field> getFieldMap(Class<?> beanClass)
      获取指定类中字段名和字段对应的有序Map,包括其父类中的字段 如果子类与父类中存在同名字段,则父类字段忽略
      Parameters:
      beanClass - 类
      Returns:
      字段名和字段对应的Map,有序
    • getFields

      public static Field[] getFields(Class<?> beanClass) throws SecurityException
      获得一个类中所有字段列表,包括其父类中的字段 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。
      Parameters:
      beanClass - 类
      Returns:
      字段列表
      Throws:
      SecurityException - 安全检查异常
    • getFields

      public static Field[] getFields(Class<?> beanClass, Predicate<Field> fieldPredicate) throws SecurityException
      获得一个类中所有满足条件的字段列表,包括其父类中的字段 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。
      Parameters:
      beanClass - 类
      fieldPredicate - field过滤器,过滤掉不需要的field,Predicate.test(Object)true保留,null表示全部保留
      Returns:
      字段列表
      Throws:
      SecurityException - 安全检查异常
    • getDeclaredFields

      public static Field[] getDeclaredFields(Class<?> beanClass, Predicate<Field> fieldPredicate) throws SecurityException
      获得当前类声明的所有字段(包括非public字段),但不包括父类的字段
      Parameters:
      beanClass - 类
      fieldPredicate - field过滤器,过滤掉不需要的field,Predicate.test(Object)true保留,null表示全部保留
      Returns:
      字段列表
      Throws:
      SecurityException - 安全检查异常
    • getFieldsDirectly

      public static Field[] getFieldsDirectly(Class<?> beanClass, boolean withSuperClassFields) throws SecurityException
      获得一个类中所有字段列表,直接反射获取,无缓存 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。
      Parameters:
      beanClass - 类
      withSuperClassFields - 是否包括父类的字段列表
      Returns:
      字段列表
      Throws:
      SecurityException - 安全检查异常
    • getFieldValue

      public static Object getFieldValue(Object obj, String fieldName) throws InternalException
      获取字段值
      Parameters:
      obj - 对象,如果static字段,此处为类
      fieldName - 字段名
      Returns:
      字段值
      Throws:
      InternalException - 包装IllegalAccessException异常
    • getStaticFieldValue

      public static Object getStaticFieldValue(Field field) throws InternalException
      获取静态字段值
      Parameters:
      field - 字段
      Returns:
      字段值
      Throws:
      InternalException - 包装IllegalAccessException异常
    • getFieldValue

      public static Object getFieldValue(Object obj, Field field) throws InternalException
      获取字段值
      Parameters:
      obj - 对象,static字段则此字段为null
      field - 字段
      Returns:
      字段值
      Throws:
      InternalException - 包装IllegalAccessException异常
    • getFieldsValue

      public static Object[] getFieldsValue(Object obj)
      获取所有字段的值
      Parameters:
      obj - bean对象,如果是static字段,此处为类class
      Returns:
      字段值数组
    • getFieldsValue

      public static Object[] getFieldsValue(Object obj, Predicate<Field> filter)
      获取所有字段的值
      Parameters:
      obj - bean对象,如果是static字段,此处为类class
      filter - 字段过滤器,null返回原集合
      Returns:
      字段值数组
    • setFieldValue

      public static void setFieldValue(Object obj, String fieldName, Object value) throws InternalException
      设置字段值
      Parameters:
      obj - 对象,static字段则此处传Class
      fieldName - 字段名
      value - 值,值类型必须与字段类型匹配,不会自动转换对象类型
      Throws:
      InternalException - 包装IllegalAccessException异常
    • setStaticFieldValue

      public static void setStaticFieldValue(Field field, Object value) throws InternalException
      设置静态(static)字段值
      Parameters:
      field - 字段
      value - 值,值类型必须与字段类型匹配,不会自动转换对象类型
      Throws:
      InternalException - 包装IllegalAccessException异常
    • setFieldValue

      public static void setFieldValue(Object obj, Field field, Object value) throws InternalException
      设置字段值,如果值类型必须与字段类型匹配,会自动转换对象类型
      Parameters:
      obj - 对象,如果是static字段,此参数为null
      field - 字段
      value - 值,类型不匹配会自动转换对象类型
      Throws:
      InternalException - 包装IllegalAccessException异常
    • setFieldValueExact

      public static void setFieldValueExact(Object obj, Field field, Object value) throws InternalException
      设置字段值,传入的字段值必须和字段类型一致,否则抛出异常
      Parameters:
      obj - 对象,如果是static字段,此参数为null
      field - 字段
      value - 值,值类型必须与字段类型匹配
      Throws:
      InternalException - 包装IllegalAccessException异常