public class ReflectUtils extends Object
| 限定符和类型 | 字段和说明 |
|---|---|
static Pattern |
GET_PATTERN |
static Pattern |
IS_PATTERN |
static Pattern |
START_UPPER_PATTERN |
| 限定符和类型 | 方法和说明 |
|---|---|
static Field |
findField(Class<?> clazz,
String name)
在指定类及其父类中查找字段。
|
static Field |
findField(Class<?> clazz,
String name,
Class<?> type)
在指定类及其父类中查找字段。
|
static String |
fnToFieldName(Fn fn)
根据传入的函数式接口
Fn 获取对应的字段名。 |
static List<Field> |
getAllFields(Class<?> clazz) |
static List<Field> |
getAllFields(Class<?> clazz,
Function<Field,Boolean> filterRules)
获取指定类中的所有字段
|
static Object |
getFieldValue(Object target,
Field field) |
static List<Class<?>> |
getGenericTypes(Class<?> clazz)
获取指定类的泛型类型。
|
static List<Class<?>> |
getGenericTypes(Class<?> clazz,
Class<?>... filterRawType)
获取指定类的泛型类型。
|
static String |
getOriginalClassCanonicalName(Fn fn)
从 SerializedLambda 获取原始类的全限定名称。
|
static String |
getOriginalClassShortCanonicalName(Fn fn)
从 SerializedLambda 获取原始类的短名称(不包含包名)。
|
static <C> Class<C> |
getReturnTypeFromSignature(Fn fn)
从给定的函数式接口 `Fn` 中获取返回值的类型。
|
static Class<?> |
getUserGenericClassByField(Field field) |
static <T> T |
instance(Class<T> clazz,
Object... args) |
static boolean |
isAssignable(Class<?> paramType,
Object arg)
检查给定的参数对象是否可以赋值给指定的目标类型。
|
static Class<?> |
loadClass(String classCanonicalName) |
static void |
makeAccessible(Field field) |
static void |
setFieldValue(Object target,
Field field,
Object value) |
public static final Pattern GET_PATTERN
public static final Pattern START_UPPER_PATTERN
public static final Pattern IS_PATTERN
public static List<Field> getAllFields(Class<?> clazz, Function<Field,Boolean> filterRules)
clazz - 指定类filterRules - 自定义过滤规则,只选择匹配到的属性public static String fnToFieldName(Fn fn)
Fn 获取对应的字段名。
该方法通过序列化 Lambda 表达式,获取实现方法的名称,并根据 Java Bean 规范进行处理:
处理完成后,将字段名首字母小写,确保符合 Java 命名规范。
Portions of this method are derived from: tk.mybatis.mapper.weekend.reflection.Reflections#fnToFieldName
Original Author: abel533
Licensed under the MIT License
fn - 代表字段的函数式接口public static String getOriginalClassCanonicalName(Fn fn)
fn - 代表字段的函数式接口public static String getOriginalClassShortCanonicalName(Fn fn)
fn - 代表字段的函数式接口public static <C> Class<C> getReturnTypeFromSignature(Fn fn)
该方法通过 `SerializedLambda` 获取函数的签名信息,解析其中的返回值类型描述符,并将其转换为对应的 Java 类。
C - 返回值的类型fn - 代表字段的函数式接口RuntimeException - 如果无法找到对应的类public static List<Class<?>> getGenericTypes(Class<?> clazz)
clazz - 要解析的类public static List<Class<?>> getGenericTypes(Class<?> clazz, Class<?>... filterRawType)
clazz - 要解析的类filterRawType - (可选)用于筛选的原始类型(Raw Type),例如接口或类的类型public static void makeAccessible(Field field)
public static boolean isAssignable(Class<?> paramType, Object arg)
此方法支持常规的类型匹配(通过 Class.isAssignableFrom(Class)),
额外处理了 Java 基本类型与其对应的包装类型之间的兼容关系。
例如:
int.class 与 Integer.class 视为可赋值。boolean.class 与 Boolean.class 视为可赋值。null 可以赋值给任何引用类型,但不能赋值给基本类型。paramType - 目标参数类型(可能是基本类型或引用类型)。arg - 待检查的参数对象,可以为 null。true;否则返回 false。
示例:
isAssignable(int.class, 123); // true
isAssignable(Integer.class, 123); // true
isAssignable(boolean.class, Boolean.TRUE); // true
isAssignable(String.class, null); // true
isAssignable(int.class, null); // false
public static Field findField(Class<?> clazz, String name)
此方法会从给定类开始,逐层向上遍历父类,查找名称匹配的字段。
与 findField(Class, String, Class) 不同的是,此方法不限制字段类型。
clazz - 要搜索的类,不能为空。name - 字段名称,不能为空。默认大小写不敏感。Field 对象;如果未找到,返回 null。
示例:
Field idField = findField(User.class, "id");
public static Field findField(Class<?> clazz, String name, Class<?> type)
此方法会从给定类开始,逐层向上遍历父类,查找名称匹配的字段。
如果指定了 type,则字段类型也必须匹配。
clazz - 要搜索的类,不能为空。name - 字段名称,不能为空。默认大小写不敏感。type - 可选的字段类型。如果为 null,则不限制类型。Field 对象;如果未找到,返回 null。
示例:
Field idField = findField(User.class, "id");
Field nameField = findField(User.class, "name", String.class);
Copyright © 2024–2025 Dynamic-SQL. All rights reserved.