Class Ref

java.lang.Object
com.imyeyu.java.ref.Ref

public class Ref extends Object
反射工具类,提供字段与方法查找、字段读写、字符串转枚举等能力
Since:
2023-05-04 15:05
Author:
夜雨
  • Constructor Details

    • Ref

      public Ref()
  • Method Details

    • listFields

      public static List<Field> listFields(Class<?> clazz)
      获取指定类声明的字段列表(不包含父类)
      Parameters:
      clazz - 类型对象
      Returns:
      字段列表
    • listAllFields

      public static List<Field> listAllFields(Class<?> clazz)
      获取指定类及其父类声明的字段列表(直到 Object 之前)
      Parameters:
      clazz - 类型对象
      Returns:
      字段列表
    • getFieldName

      public static String getFieldName(String keyName)
      将外部键名转换为 Java 字段名
      Parameters:
      keyName - 外部键名,支持中划线、下划线和空格分隔
      Returns:
      驼峰命名字段名
    • getField

      public static Field getField(Class<?> clazz, String fieldName)
      反射获取对象字段,包括父级类,直至 Object,如果都不存在则抛出异常
      Parameters:
      clazz - 类
      fieldName - 字段名
      Returns:
      字段对象
      Throws:
      NullPointerException - 找不到字段时抛出异常
    • getFieldValue

      public static <T> T getFieldValue(Object object, String fieldName, Class<? extends T> toClass) throws IllegalAccessException, NullPointerException
      反射获取对象字段值,包括父级类,直至 Object
      Type Parameters:
      T - 返回类型
      Parameters:
      object - 对象
      fieldName - 字段名
      toClass - 返回类
      Returns:
      字段值
      Throws:
      IllegalAccessException - 反射访问失败
      NullPointerException - 向上反射直至 Object 也找不到该字段
    • getFieldValue

      public static <T> T getFieldValue(Object object, Field field, Class<? extends T> toClass) throws IllegalAccessException, NullPointerException
      反射获取对象字段值
      Type Parameters:
      T - 返回类型
      Parameters:
      object - 对象
      field - 字段
      toClass - 返回类
      Returns:
      字段值
      Throws:
      IllegalAccessException - 反射访问失败
      NullPointerException - 字段对象为空
    • getClassField

      public static Field getClassField(Class<?> objectClass, String fieldName)
      反射获取类字段
      Parameters:
      objectClass - 类
      fieldName - 字段名
      Returns:
      字段对象,不存在时返回 null
    • getClassFieldValue

      public static <T> T getClassFieldValue(Object object, Class<?> objectClass, String fieldName, Class<T> toClass) throws IllegalAccessException, NoSuchFieldException
      反射获取指定类字段值
      Type Parameters:
      T - 值类型
      Parameters:
      object - 对象
      objectClass - 类
      fieldName - 字段名
      toClass - 值类型
      Returns:
      字段值
      Throws:
      IllegalAccessException - 反射访问失败
      NoSuchFieldException - 字段不存在
    • setFieldValue

      public static void setFieldValue(Object object, String fieldName, Object value) throws IllegalAccessException
      反射设置对象字段值,包括父级类,直至 Object
      Parameters:
      object - 对象
      fieldName - 字段名
      value - 字段值
      Throws:
      IllegalAccessException - 反射访问失败
    • setFieldValue

      public static void setFieldValue(Object object, Field field, Object value) throws IllegalAccessException
      反射设置对象字段值
      Parameters:
      object - 对象
      field - 字段对象
      value - 字段值
      Throws:
      IllegalAccessException - 反射访问失败
    • setClassFieldValue

      public static void setClassFieldValue(Object object, Class<?> objectClass, String fieldName, Object value) throws IllegalAccessException, NullPointerException
      反射设置对象字段值
      Parameters:
      object - 对象
      objectClass - 类
      fieldName - 字段名
      value - 字段值
      Throws:
      IllegalAccessException - 反射访问失败
      NullPointerException - 字段不存在
    • getMethod

      public static Method getMethod(Class<?> clazz, String methodName, Class<?>... parameterTypes)
      反射查找方法,包括父级类,直至 Object,如果都不存在则返回 null
      Parameters:
      clazz - 类
      methodName - 方法名
      parameterTypes - 可选参
      Returns:
      方法对象,不存在时返回 null
      Throws:
      NullPointerException - 类对象为空
    • toType

      public static <T extends Enum<?>> T toType(Class<T> clazz, String string)
      字符串转枚举
      Type Parameters:
      T - 泛型
      Parameters:
      clazz - 枚举类
      string - 字符串
      Returns:
      匹配到的枚举值,找不到或输入为空时返回 null
      Throws:
      IllegalArgumentException - 传入类型不是枚举类型
    • field

      public static RefField field(Class<?> owner, String keyName)
      创建字段反射元信息对象
      Parameters:
      owner - 字段所属类型
      keyName - 字段键名
      Returns:
      字段反射元信息
    • newInstance

      public static <T> T newInstance(Class<T> type) throws Exception
      通过无参构造器创建实例
      Type Parameters:
      T - 泛型类型
      Parameters:
      type - 类型对象
      Returns:
      新实例
      Throws:
      Exception - 反射创建实例异常