Package org.miaixz.bus.core.xyz
Class FieldKit
java.lang.Object
org.miaixz.bus.core.xyz.FieldKit
反射中
Field字段工具类,包括字段获取和字段赋值。- Since:
- Java 17+
- Author:
- Kimi Liu
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic Field[]getDeclaredFields(Class<?> beanClass, Predicate<Field> fieldPredicate) 获得当前类声明的所有字段(包括非public字段),但不包括父类的字段static FieldgetDeclearField(Class<?> beanClass, String name) 获取本类定义的指定名称的字段,包括私有字段,但是不包括父类字段static Field查找指定类中的指定name的字段(包括非public字段),也包括父类和Object类的字段, 字段不存在则返回nullgetFieldMap(Class<?> beanClass) 获取指定类中字段名和字段对应的有序Map,包括其父类中的字段 如果子类与父类中存在同名字段,则父类字段忽略static StringgetFieldName(Field field) 获取字段名,如果存在Alias注解,读取注解的值作为名称static StringgetFieldName(Field field, boolean useAlias) 获取字段名,可选是否使用Alias注解,读取注解的值作为名称static Field[]获得一个类中所有字段列表,包括其父类中的字段 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。static Field[]获得一个类中所有满足条件的字段列表,包括其父类中的字段 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。static Field[]getFieldsDirectly(Class<?> beanClass, boolean withSuperClassFields) 获得一个类中所有字段列表,直接反射获取,无缓存 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。static Object[]getFieldsValue(Object obj) 获取所有字段的值static Object[]getFieldsValue(Object obj, Predicate<Field> filter) 获取所有字段的值static ObjectgetFieldValue(Object obj, Field field) 获取字段值static ObjectgetFieldValue(Object obj, String fieldName) 获取字段值static ObjectgetStaticFieldValue(Field field) 获取静态字段值static boolean查找指定类中是否包含指定名称对应的字段,包括所有字段(包括非public字段),也包括父类和Object类的字段static booleanisOuterClassField(Field field) 是否为父类引用字段 当字段所在类是对象子类时(对象中定义的非static的class),会自动生成一个以"this$0"为名称的字段,指向父类对象static voidsetFieldValue(Object obj, Field field, Object value) 设置字段值,如果值类型必须与字段类型匹配,会自动转换对象类型static voidsetFieldValue(Object obj, String fieldName, Object value) 设置字段值static voidsetFieldValueExact(Object obj, Field field, Object value) 设置字段值,传入的字段值必须和字段类型一致,否则抛出异常static voidsetStaticFieldValue(Field field, Object value) 设置静态(static)字段值
-
Constructor Details
-
FieldKit
public FieldKit()
-
-
Method Details
-
isOuterClassField
是否为父类引用字段 当字段所在类是对象子类时(对象中定义的非static的class),会自动生成一个以"this$0"为名称的字段,指向父类对象- Parameters:
field- 字段- Returns:
- 是否为父类引用字段
-
hasField
查找指定类中是否包含指定名称对应的字段,包括所有字段(包括非public字段),也包括父类和Object类的字段- Parameters:
beanClass- 被查找字段的类,不能为nullname- 字段名- Returns:
- 是否包含字段
- Throws:
SecurityException- 安全异常
-
getFieldName
获取字段名,如果存在Alias注解,读取注解的值作为名称- Parameters:
field- 字段- Returns:
- 字段名
-
getFieldName
获取字段名,可选是否使用Alias注解,读取注解的值作为名称- Parameters:
field- 字段useAlias- 是否检查并使用Alias注解- Returns:
- 字段名
-
getDeclearField
获取本类定义的指定名称的字段,包括私有字段,但是不包括父类字段- Parameters:
beanClass- Bean的Classname- 字段名称- Returns:
- 字段对象,如果未找到返回
null
-
getField
查找指定类中的指定name的字段(包括非public字段),也包括父类和Object类的字段, 字段不存在则返回null- Parameters:
beanClass- 被查找字段的类,不能为nullname- 字段名- Returns:
- 字段
- Throws:
SecurityException- 安全异常
-
getFieldMap
获取指定类中字段名和字段对应的有序Map,包括其父类中的字段 如果子类与父类中存在同名字段,则父类字段忽略- Parameters:
beanClass- 类- Returns:
- 字段名和字段对应的Map,有序
-
getFields
获得一个类中所有字段列表,包括其父类中的字段 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。- 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
获取字段值- Parameters:
obj- 对象,如果static字段,此处为类fieldName- 字段名- Returns:
- 字段值
- Throws:
InternalException- 包装IllegalAccessException异常
-
getStaticFieldValue
获取静态字段值- Parameters:
field- 字段- Returns:
- 字段值
- Throws:
InternalException- 包装IllegalAccessException异常
-
getFieldValue
获取字段值- Parameters:
obj- 对象,static字段则此字段为nullfield- 字段- Returns:
- 字段值
- Throws:
InternalException- 包装IllegalAccessException异常
-
getFieldsValue
获取所有字段的值- Parameters:
obj- bean对象,如果是static字段,此处为类class- Returns:
- 字段值数组
-
getFieldsValue
获取所有字段的值- Parameters:
obj- bean对象,如果是static字段,此处为类classfilter- 字段过滤器,null返回原集合- Returns:
- 字段值数组
-
setFieldValue
public static void setFieldValue(Object obj, String fieldName, Object value) throws InternalException 设置字段值- Parameters:
obj- 对象,static字段则此处传ClassfieldName- 字段名value- 值,值类型必须与字段类型匹配,不会自动转换对象类型- Throws:
InternalException- 包装IllegalAccessException异常
-
setStaticFieldValue
设置静态(static)字段值- Parameters:
field- 字段value- 值,值类型必须与字段类型匹配,不会自动转换对象类型- Throws:
InternalException- 包装IllegalAccessException异常
-
setFieldValue
设置字段值,如果值类型必须与字段类型匹配,会自动转换对象类型- Parameters:
obj- 对象,如果是static字段,此参数为nullfield- 字段value- 值,类型不匹配会自动转换对象类型- Throws:
InternalException- 包装IllegalAccessException异常
-
setFieldValueExact
public static void setFieldValueExact(Object obj, Field field, Object value) throws InternalException 设置字段值,传入的字段值必须和字段类型一致,否则抛出异常- Parameters:
obj- 对象,如果是static字段,此参数为nullfield- 字段value- 值,值类型必须与字段类型匹配- Throws:
InternalException- 包装IllegalAccessException异常
-