Package org.miaixz.bus.core.xyz
Class BeanKit
java.lang.Object
org.miaixz.bus.core.xyz.BeanKit
Bean工具类
把一个拥有对属性进行set和get方法的类,我们就可以称之为JavaBean
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription对象转Map将bean的部分属性转换成map 可选拷贝哪些属性值,默认是不忽略值为null的值的。beanToMap(Object bean, Map<String, Object> targetMap, boolean isToUnderlineCase, boolean ignoreNullValue) 对象转MapbeanToMap(Object bean, Map<String, Object> targetMap, boolean ignoreNullValue, UnaryOperator<MutableEntry<String, Object>> keyEditor) 对象转Map 通过实现UnaryOperator可以自定义字段值,如果这个Editor返回null则忽略这个字段,以便实现:对象转Map 通过自定义CopyOptions完成抓换选项,以便实现:static boolean检查Bean 遍历Bean的字段并断言检查字段,当某个字段: 断言为true时,返回true并不再检查后续字段; 断言为false时,继续检查后续字段static <T> TcopyProperties(Object source, Class<T> tClass, String... ignoreProperties) 按照Bean对象属性创建对应的Class对象,并忽略某些属性static <T> TcopyProperties(Object source, T target, boolean ignoreCase) 复制Bean对象属性static <T> TcopyProperties(Object source, T target, String... ignoreProperties) 复制Bean对象属性 限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类static <T> TcopyProperties(Object source, T target, CopyOptions copyOptions) 复制Bean对象属性 限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类static <T> List<T> copyToList(Collection<?> collection, Class<T> targetType) 复制集合中的Bean属性 此方法遍历集合中每个Bean,复制其属性后加入一个新的List中。static <T> List<T> copyToList(Collection<?> collection, Class<T> targetType, CopyOptions copyOptions) 复制集合中的Bean属性 此方法遍历集合中每个Bean,复制其属性后加入一个新的List中。static DynaBeancreateDynaBean(Object bean) 创建动态Beanstatic voiddescForEach(Class<?> clazz, Consumer<? super PropDesc> action) 遍历Bean的属性static <T> Tedit(T bean, UnaryOperator<Field> editor) 编辑Bean的字段,static字段不会处理 例如需要对指定的字段做判空操作、null转""操作等等。static <T> TfillBean(T bean, ValueProvider<String> valueProvider, CopyOptions copyOptions) 填充Bean的核心方法static <T> TfillBeanWithMap(Map<?, ?> map, T bean, CopyOptions copyOptions) 使用Map填充Bean对象static PropertyEditorfindEditor(Class<?> type) 查找类型转换器PropertyEditorstatic StrictBeanDescgetBeanDesc(Class<?> clazz) 获取StrictBeanDescBean描述信息static StringgetFieldName(String getterOrSetterName) 获取Getter或Setter方法名对应的字段名称,规则如下: getXxxx获取为xxxx,如getName得到name。 setXxxx获取为xxxx,如setName得到name。 isXxxx获取为xxxx,如isName得到name。 其它不满足规则的方法名抛出IllegalArgumentExceptionstatic ObjectgetFieldValue(Object bean, String fieldNameOrIndex) 获得字段值,通过反射直接获得字段值,并不调用getXXX方法 对象同样支持Map类型,fieldNameOrIndex即为key Map: fieldNameOrIndex需为key,获取对应value Collection: fieldNameOrIndex当为数字,返回index对应值,非数字遍历集合返回子bean对应name值 Array: fieldNameOrIndex当为数字,返回index对应值,非数字遍历数组返回子bean对应name值static <T> TgetProperty(Object bean, String expression) 获取Bean中的属性值static PropertyDescriptorgetPropertyDescriptor(Class<?> clazz, String fieldName) 获得Bean类属性描述,大小写敏感static PropertyDescriptorgetPropertyDescriptor(Class<?> clazz, String fieldName, boolean ignoreCase) 获得Bean类属性描述static Map<String, PropertyDescriptor> getPropertyDescriptorMap(Class<?> clazz, boolean ignoreCase) 获得字段名和字段描述Map,获得的结果会缓存在BeanInfoCache中static PropertyDescriptor[]getPropertyDescriptors(Class<?> clazz) 获得Bean字段描述数组static booleanhasEmptyField(Object bean, String... ignoreFieldNames) static boolean判断是否为Bean对象 判定方法是否存在只有无参数的getXXX方法或者isXXX方法static booleanhasNullField(Object bean, String... ignoreFieldNames) 判断Bean是否包含值为null的属性 对象本身为null也返回truestatic booleanhasPublicField(Class<?> clazz) 指定类中是否有public类型字段(static字段除外)static boolean判断是否有Setter方法 判定方法是否存在只有一个参数的setXXX方法static boolean判断Bean是否为空对象,空对象表示本身为null或者所有属性都为null此方法不判断static属性static booleanisMatchName(Object bean, String beanClassName, boolean isSimple) 给定的Bean的类名是否匹配指定类名字符串 如果isSimple为true,则只匹配类名而忽略包名,例如:org.miaixz.TestEntity只匹配TestEntity 如果isSimple为false,则匹配包括包名的全类名,例如:org.miaixz.TestEntity匹配org.miaixz.TestEntitystatic booleanisNotEmpty(Object bean, String... ignoreFieldNames) 判断Bean是否为非空对象,非空对象表示本身不为null或者含有非null属性的对象static booleanisReadableBean(Class<?> clazz) 判断是否为可读的Bean对象,判定方法是:static booleanisWritableBean(Class<?> clazz) 判断是否为可写Bean对象,判定方法是:static ObjectsetFieldValue(Object bean, String fieldNameOrIndex, Object value) 设置字段值,通过反射设置字段值,并不调用setXXX方法 对象同样支持Map类型,fieldNameOrIndex即为key,支持: Map List Beanstatic voidsetProperty(Object bean, String expression, Object value) 设置Bean中的属性值static <T> T对象或Map转Beanstatic <T> TtoBean(Object source, Class<T> clazz, CopyOptions options) 对象或Map转Beanstatic <T> TtoBean(Object source, Supplier<T> targetSupplier, CopyOptions options) 对象或Map转Beanstatic <T> TtrimStringField(T bean, String... ignoreField) 把Bean里面的String属性做trim操作。此方法直接对传入的Bean做修改。 通常bean直接用来绑定页面的input,用户的输入可能首尾存在空格,通常保存数据库前需要把首尾空格去掉
-
Constructor Details
-
BeanKit
public BeanKit()
-
-
Method Details
-
createDynaBean
创建动态Bean- Parameters:
bean- 普通Bean或Map- Returns:
DynaBean
-
findEditor
查找类型转换器PropertyEditor- Parameters:
type- 需要转换的目标类型- Returns:
PropertyEditor
-
getBeanDesc
获取StrictBeanDescBean描述信息- Parameters:
clazz- Bean类- Returns:
StrictBeanDesc
-
descForEach
遍历Bean的属性- Parameters:
clazz- Bean类action- 每个元素的处理类
-
getPropertyDescriptors
获得Bean字段描述数组- Parameters:
clazz- Bean类- Returns:
- 字段描述数组
- Throws:
BeanException- 获取属性异常
-
getPropertyDescriptorMap
public static Map<String,PropertyDescriptor> getPropertyDescriptorMap(Class<?> clazz, boolean ignoreCase) throws BeanException 获得字段名和字段描述Map,获得的结果会缓存在BeanInfoCache中- Parameters:
clazz- Bean类ignoreCase- 是否忽略大小写- Returns:
- 字段名和字段描述Map
- Throws:
BeanException- 获取属性异常
-
getPropertyDescriptor
public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String fieldName) throws BeanException 获得Bean类属性描述,大小写敏感- Parameters:
clazz- Bean类fieldName- 字段名- Returns:
- PropertyDescriptor
- Throws:
BeanException- 获取属性异常
-
getPropertyDescriptor
public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String fieldName, boolean ignoreCase) throws BeanException 获得Bean类属性描述- Parameters:
clazz- Bean类fieldName- 字段名ignoreCase- 是否忽略大小写- Returns:
- PropertyDescriptor
- Throws:
BeanException- 获取属性异常
-
getFieldValue
获得字段值,通过反射直接获得字段值,并不调用getXXX方法 对象同样支持Map类型,fieldNameOrIndex即为key- Map: fieldNameOrIndex需为key,获取对应value
- Collection: fieldNameOrIndex当为数字,返回index对应值,非数字遍历集合返回子bean对应name值
- Array: fieldNameOrIndex当为数字,返回index对应值,非数字遍历数组返回子bean对应name值
- Parameters:
bean- Bean对象fieldNameOrIndex- 字段名或序号,序号支持负数- Returns:
- 字段值
-
setFieldValue
设置字段值,通过反射设置字段值,并不调用setXXX方法 对象同样支持Map类型,fieldNameOrIndex即为key,支持:- Map
- List
- Bean
- Parameters:
bean- BeanfieldNameOrIndex- 字段名或序号,序号支持负数value- 值- Returns:
- beans,当为数组时,返回一个新的数组
-
getProperty
获取Bean中的属性值- Type Parameters:
T- 属性值类型- Parameters:
bean- Bean对象,支持Map、List、Collection、Arrayexpression- 表达式,例如:person.friend[5].name- Returns:
- Bean属性值,bean为
null或者express为空,返回null - See Also:
-
setProperty
设置Bean中的属性值- Parameters:
bean- Bean对象,支持Map、List、Collection、Arrayexpression- 表达式,例如:person.friend[5].namevalue- 属性值- See Also:
-
toBean
对象或Map转Bean- Type Parameters:
T- 转换的Bean类型- Parameters:
source- Bean对象或Mapclazz- 目标的Bean类型- Returns:
- Bean对象
-
toBean
对象或Map转Bean- Type Parameters:
T- 转换的Bean类型- Parameters:
source- Bean对象或Mapclazz- 目标的Bean类型options- 属性拷贝选项- Returns:
- Bean对象
-
toBean
对象或Map转Bean- Type Parameters:
T- 转换的Bean类型- Parameters:
source- Bean对象或Map或ValueProvidertargetSupplier- 目标的Bean创建器options- 属性拷贝选项- Returns:
- Bean对象
-
fillBean
填充Bean的核心方法- Type Parameters:
T- Bean类型- Parameters:
bean- BeanvalueProvider- 值提供者copyOptions- 拷贝选项,见CopyOptions- Returns:
- Bean
-
fillBeanWithMap
使用Map填充Bean对象- Type Parameters:
T- Bean类型- Parameters:
map- Mapbean- BeancopyOptions- 属性复制选项CopyOptions- Returns:
- Bean
-
beanToMap
将bean的部分属性转换成map 可选拷贝哪些属性值,默认是不忽略值为null的值的。- Parameters:
bean- beansproperties- 需要拷贝的属性值,null或空表示拷贝所有值- Returns:
- Map
-
beanToMap
public static Map<String,Object> beanToMap(Object bean, boolean isToUnderlineCase, boolean ignoreNullValue) 对象转Map- Parameters:
bean- bean对象isToUnderlineCase- 是否转换为下划线模式ignoreNullValue- 是否忽略值为空的字段- Returns:
- Map
-
beanToMap
public static Map<String,Object> beanToMap(Object bean, Map<String, Object> targetMap, boolean isToUnderlineCase, boolean ignoreNullValue) 对象转Map- Parameters:
bean- bean对象targetMap- 目标的MapisToUnderlineCase- 是否转换为下划线模式ignoreNullValue- 是否忽略值为空的字段- Returns:
- Map
-
beanToMap
public static Map<String,Object> beanToMap(Object bean, Map<String, Object> targetMap, boolean ignoreNullValue, UnaryOperator<MutableEntry<String, Object>> keyEditor) 对象转Map 通过实现UnaryOperator可以自定义字段值,如果这个Editor返回null则忽略这个字段,以便实现:1. 字段筛选,可以去除不需要的字段 2. 字段变换,例如实现驼峰转下划线 3. 自定义字段前缀或后缀等等
- Parameters:
bean- bean对象targetMap- 目标的MapignoreNullValue- 是否忽略值为空的字段keyEditor- 属性字段(Map的key)编辑器,用于筛选、编辑key,如果这个Editor返回null则忽略这个字段- Returns:
- Map
-
beanToMap
public static Map<String,Object> beanToMap(Object bean, Map<String, Object> targetMap, CopyOptions copyOptions) 对象转Map 通过自定义CopyOptions完成抓换选项,以便实现:1. 字段筛选,可以去除不需要的字段 2. 字段变换,例如实现驼峰转下划线 3. 自定义字段前缀或后缀等等 4. 字段值处理 ...
- Parameters:
bean- bean对象targetMap- 目标的MapcopyOptions- 拷贝选项- Returns:
- Map
-
copyProperties
按照Bean对象属性创建对应的Class对象,并忽略某些属性- Type Parameters:
T- 对象类型- Parameters:
source- 源Bean对象tClass- 目标ClassignoreProperties- 不拷贝的的属性列表- Returns:
- 目标对象
-
copyProperties
复制Bean对象属性 限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类- Type Parameters:
T- 目标类型- Parameters:
source- 源Bean对象target- 目标Bean对象ignoreProperties- 不拷贝的的属性列表- Returns:
- 目标对象
-
copyProperties
复制Bean对象属性- Type Parameters:
T- 目标类型- Parameters:
source- 源Bean对象target- 目标Bean对象ignoreCase- 是否忽略大小写- Returns:
- 目标对象
-
copyProperties
复制Bean对象属性 限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类- Type Parameters:
T- 目标类型- Parameters:
source- 源Bean对象target- 目标Bean对象copyOptions- 拷贝选项,见CopyOptions- Returns:
- 目标对象
-
copyToList
复制集合中的Bean属性 此方法遍历集合中每个Bean,复制其属性后加入一个新的List中。- Type Parameters:
T- Bean类型- Parameters:
collection- 原Bean集合targetType- 目标Bean类型- Returns:
- 复制后的List
-
copyToList
public static <T> List<T> copyToList(Collection<?> collection, Class<T> targetType, CopyOptions copyOptions) 复制集合中的Bean属性 此方法遍历集合中每个Bean,复制其属性后加入一个新的List中。- Type Parameters:
T- Bean类型- Parameters:
collection- 原Bean集合targetType- 目标Bean类型copyOptions- 拷贝选项- Returns:
- 复制后的List
-
isMatchName
给定的Bean的类名是否匹配指定类名字符串 如果isSimple为true,则只匹配类名而忽略包名,例如:org.miaixz.TestEntity只匹配TestEntity 如果isSimple为false,则匹配包括包名的全类名,例如:org.miaixz.TestEntity匹配org.miaixz.TestEntity- Parameters:
bean- BeanbeanClassName- Bean的类名isSimple- 是否只匹配类名而忽略包名,true表示忽略包名- Returns:
- 是否匹配
-
edit
编辑Bean的字段,static字段不会处理 例如需要对指定的字段做判空操作、null转""操作等等。- Type Parameters:
T- 被编辑的Bean类型- Parameters:
bean- beanseditor- 编辑器函数- Returns:
- beans
-
trimStringField
把Bean里面的String属性做trim操作。此方法直接对传入的Bean做修改。 通常bean直接用来绑定页面的input,用户的输入可能首尾存在空格,通常保存数据库前需要把首尾空格去掉- Type Parameters:
T- Bean类型- Parameters:
bean- Bean对象ignoreField- 不需要trim的Field名称列表(不区分大小写)- Returns:
- 处理后的Bean对象
-
isEmpty
判断Bean是否为空对象,空对象表示本身为null或者所有属性都为null此方法不判断static属性- Parameters:
bean- Bean对象ignoreFieldNames- 忽略检查的字段名- Returns:
- 是否为空,
true- 空 /false- 非空
-
isNotEmpty
判断Bean是否为非空对象,非空对象表示本身不为null或者含有非null属性的对象- Parameters:
bean- Bean对象ignoreFieldNames- 忽略检查的字段名- Returns:
- 是否为非空,
true- 非空 /false- 空
-
isReadableBean
判断是否为可读的Bean对象,判定方法是:1、是否存在只有无参数的getXXX方法或者isXXX方法 2、是否存在public类型的字段- Parameters:
clazz- 待测试类- Returns:
- 是否为可读的Bean对象
- See Also:
-
isWritableBean
判断是否为可写Bean对象,判定方法是:1、是否存在只有一个参数的setXXX方法 2、是否存在public类型的字段- Parameters:
clazz- 待测试类- Returns:
- 是否为Bean对象
- See Also:
-
hasSetter
判断是否有Setter方法 判定方法是否存在只有一个参数的setXXX方法- Parameters:
clazz- 待测试类- Returns:
- 是否为Bean对象
-
hasGetter
判断是否为Bean对象 判定方法是否存在只有无参数的getXXX方法或者isXXX方法- Parameters:
clazz- 待测试类- Returns:
- 是否为Bean对象
-
hasPublicField
指定类中是否有public类型字段(static字段除外)- Parameters:
clazz- 待测试类- Returns:
- 是否有public类型字段
-
hasNullField
判断Bean是否包含值为null的属性 对象本身为null也返回true- Parameters:
bean- Bean对象ignoreFieldNames- 忽略检查的字段名- Returns:
- 是否包含值为
null的属性,true- 包含 /false- 不包含
-
hasEmptyField
- Parameters:
bean- Bean对象ignoreFieldNames- 忽略检查的字段名- Returns:
- 是否包含值为
null的属性,true- 包含 /false- 不包含
-
checkBean
检查Bean 遍历Bean的字段并断言检查字段,当某个字段: 断言为true时,返回true并不再检查后续字段; 断言为false时,继续检查后续字段- Parameters:
bean- Beanpredicate- 断言- Returns:
- 是否触发断言为真
-
getFieldName
获取Getter或Setter方法名对应的字段名称,规则如下:- getXxxx获取为xxxx,如getName得到name。
- setXxxx获取为xxxx,如setName得到name。
- isXxxx获取为xxxx,如isName得到name。
- 其它不满足规则的方法名抛出
IllegalArgumentException
- Parameters:
getterOrSetterName- Getter或Setter方法名- Returns:
- 字段名称
- Throws:
IllegalArgumentException- 非Getter或Setter方法
-