Class FieldKit

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

public class FieldKit extends Object
反射中Field字段工具类,包括字段获取和字段赋值。
Since:
Java 17+
Author:
Kimi Liu
  • 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> filter) throws SecurityException
      获得一个类中所有满足条件的字段列表,包括其父类中的字段 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。
      Parameters:
      beanClass - 类
      filter - field过滤器,过滤掉不需要的field,Predicate.test(Object)true保留,null表示全部保留
      Returns:
      字段列表
      Throws:
      SecurityException - 安全检查异常
    • getDeclaredFields

      public static Field[] getDeclaredFields(Class<?> beanClass, Predicate<Field> filter) throws SecurityException
      获得当前类声明的所有字段(包括非public字段),但不包括父类的字段
      Parameters:
      beanClass - 类
      filter - 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:
      字段值数组
    • getFieldsAndValue

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

      public static Object getFieldsAndValue(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异常
    • isSerialVersionUID

      public static boolean isSerialVersionUID(Field field)
      给定类是否存在serialVersionUID字段
      Parameters:
      field - 字段
      Returns:
      是否存在serialVersionUID字段