Package org.aoju.bus.core.toolkit
Class BeanKit
java.lang.Object
org.aoju.bus.core.toolkit.BeanKit
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription对象转Map,不进行驼峰转下划线,不忽略值为空的字段对象转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 <T> TcopyProperties(Object source, Class<T> clazz, String... ignoreProperties) 按照Bean对象属性创建对应的Class对象,并忽略某些属性static voidcopyProperties(Object source, Object target, boolean ignoreCase) 复制Bean对象属性static voidcopyProperties(Object source, Object target, String... ignoreProperties) 复制Bean对象属性 限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类static voidcopyProperties(Object source, Object 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 DynamicBean创建动态Beanstatic voiddescForEach(Class<?> clazz, Consumer<? super PropertyDesc> action) 遍历Bean的属性static <T> T编辑Bean的字段,static字段不会处理 例如需要对指定的字段做判空操作、null转""操作等等。static <T> TfillBean(T bean, ValueProvider<String> valueProvider, CopyOptions copyOptions) 填充Bean的核心方法static <T> TfillBeanWithMap(Map<?, ?> map, T bean, boolean isIgnoreError) 使用Map填充Bean对象static <T> TfillBeanWithMap(Map<?, ?> map, T bean, boolean isToCamelCase, boolean isIgnoreError) 使用Map填充Bean对象,可配置将下划线转换为驼峰static <T> TfillBeanWithMap(Map<?, ?> map, T bean, boolean isToCamelCase, CopyOptions copyOptions) 使用Map填充Bean对象static <T> TfillBeanWithMap(Map<?, ?> map, T bean, CopyOptions copyOptions) 使用Map填充Bean对象static <T> TfillBeanWithMapIgnoreCase(Map<?, ?> map, T bean, boolean isIgnoreError) 使用Map填充Bean对象,忽略大小写static PropertyEditorfindEditor(Class<?> type) 查找类型转换器PropertyEditorstatic voidforEach(Class<?> clazz, Consumer<? super PropertyDesc> action) 遍历Bean的属性static BeanDescgetBeanDesc(Class<?> clazz) 获取BeanDescBean描述信息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,获得的结果会缓存在PropertyCache中static PropertyDescriptor[]getPropertyDescriptors(Class<?> clazz) 获得Bean字段描述数组static boolean判断是否为Bean对象 判定方法是否存在只有一个参数的getXXX方法static booleanhasModifier(Class<?> clazz, BeanKit.ModifierType... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)static booleanhasModifier(Constructor<?> constructor, BeanKit.ModifierType... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)static booleanhasModifier(Field field, BeanKit.ModifierType... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)static booleanhasModifier(Member member, BeanKit.ModifierType... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)static booleanhasModifier(Method method, BeanKit.ModifierType... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)static boolean判断Bean中是否有值为null的字段static booleanhasNullField(Object bean) 判断Bean是否包含值为null的属性 对象本身为null也返回truestatic booleanhasNullField(Object bean, String... ignoreFieldNames) 判断Bean是否包含值为null的属性 对象本身为null也返回truestatic booleanhasPublicField(Class<?> clazz) 指定类中是否有public类型字段(static字段除外)static boolean判断是否有Setter方法 判定方法是否存在只有一个参数的setXXX方法static booleanisAbstract(Class<?> clazz) 是否抽象类static booleanisAbstract(Member member) 是否抽象成员static boolean判断是否为Bean对象 判定方法是否存在只有一个参数的setXXX方法static booleanisCommonFieldsEqual(Object source, Object target, String... ignoreProperties) 判断source与target的所有公共字段的值是否相同static boolean判断Bean是否为空对象,空对象表示本身为null或者所有属性都为nullstatic booleanisInterface(Class<?> clazz) 是否抽象类static booleanisMatchName(Object bean, String beanClassName, boolean isSimple) 给定的Bean的类名是否匹配指定类名字符串 如果isSimple为true,则只匹配类名而忽略包名 如果isSimple为false,则匹配包括包名的全类名static booleanisNotEmpty(Object bean, String... ignoreFieldNames) 判断Bean是否为非空对象,非空对象表示本身不为null或者含有非null属性的对象static booleanisProtected(Member member) 是否是Protected成员,可检测包括构造、字段和方法static boolean是否是Public类static boolean是否是Public成员,可检测包括构造、字段和方法static booleanisReadable(Class<?> clazz) 判断是否为可读的Bean对象,判定方法是:static boolean是否是static类static boolean是否是static成员,包括构造、字段或方法static booleanisSynthetic(Class<?> clazz) 是否是合成类(由java编译器生成的)static booleanisSynthetic(Member member) 是否是合成成员(由java编译器生成的)static voidreplaceStrFields(Object bean) bean 中所有属性为字符串的进行\n\t\s处理static voidsetFieldValue(Object bean, String fieldNameOrIndex, Object value) 设置字段值,,通过反射设置字段值,并不调用setXXX方法 对象同样支持Map类型,fieldNameOrIndex即为keystatic voidsetProperty(Object bean, String expression, Object value) 解析Bean中的属性值static <T> TtoBean(Class<T> beanClass, ValueProvider<String> valueProvider, CopyOptions copyOptions) ServletRequest 参数转Beanstatic <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> TtoBeanIgnoreCase(Object source, Class<T> clazz, boolean ignoreError) 对象或Map转Bean,忽略字段转换时发生的异常static <T> TtoBeanIgnoreError(Object source, Class<T> clazz) 对象或Map转Bean,忽略字段转换时发生的异常static voidtrimAllFields(Object bean) 转义bean中所有属性为字符串的static <T> TtrimStrField(T bean, String... ignoreField) 把Bean里面的String属性做trim操作static <T> TtrimStrFields(T bean, String... ignoreFields) 把Bean里面的String属性做trim操作。
-
Constructor Details
-
BeanKit
public BeanKit()
-
-
Method Details
-
isBean
判断是否为Bean对象 判定方法是否存在只有一个参数的setXXX方法- Parameters:
clazz- 待测试类- Returns:
- 是否为Bean对象
-
isReadable
判断是否为可读的Bean对象,判定方法是:1、是否存在只有无参数的getXXX方法或者isXXX方法 2、是否存在public类型的字段- Parameters:
clazz- 待测试类- Returns:
- 是否为可读的Bean对象
- See Also:
-
isEmpty
-
isNotEmpty
-
hasNull
判断Bean中是否有值为null的字段- Parameters:
bean- Bean- Returns:
- 是否有值为null的字段
-
hasSetter
判断是否有Setter方法 判定方法是否存在只有一个参数的setXXX方法- Parameters:
clazz- 待测试类- Returns:
- 是否为Bean对象
-
hasGetter
判断是否为Bean对象 判定方法是否存在只有一个参数的getXXX方法- Parameters:
clazz- 待测试类- Returns:
- 是否为Bean对象
-
hasPublicField
指定类中是否有public类型字段(static字段除外)- Parameters:
clazz- 待测试类- Returns:
- 是否有public类型字段
-
hasNullField
判断Bean是否包含值为null的属性 对象本身为null也返回true- Parameters:
bean- Bean对象- Returns:
- 是否包含值为
null的属性,true- 包含 /false- 不包含
-
hasNullField
-
trimStrField
把Bean里面的String属性做trim操作通常bean直接用来绑定页面的input,用户的输入可能首尾存在空格,通常保存数据库前需要把首尾空格去掉
- Type Parameters:
T- Bean类型- Parameters:
bean- Bean对象ignoreField- 不需要trim的Field名称列表(不区分大小写)- Returns:
- the object
-
create
创建动态Bean- Parameters:
bean- 普通Bean或Map- Returns:
DynamicBean
-
findEditor
查找类型转换器PropertyEditor- Parameters:
type- 需要转换的目标类型- Returns:
PropertyEditor
-
getBeanDesc
-
descForEach
遍历Bean的属性- Parameters:
clazz- Bean类action- 每个元素的处理类
-
getPropertyDescriptors
获得Bean字段描述数组- Parameters:
clazz- Bean类- Returns:
- 字段描述数组
- Throws:
InternalException- 获取属性异常
-
getPropertyDescriptorMap
public static Map<String,PropertyDescriptor> getPropertyDescriptorMap(Class<?> clazz, boolean ignoreCase) 获得字段名和字段描述Map,获得的结果会缓存在PropertyCache中- Parameters:
clazz- Bean类ignoreCase- 是否忽略大小写- Returns:
- 字段名和字段描述Map
-
getPropertyDescriptor
获得Bean类属性描述,大小写敏感- Parameters:
clazz- Bean类fieldName- 字段名- Returns:
- PropertyDescriptor
-
getPropertyDescriptor
public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String fieldName, boolean ignoreCase) 获得Bean类属性描述- Parameters:
clazz- Bean类fieldName- 字段名ignoreCase- 是否忽略大小写- Returns:
- PropertyDescriptor
-
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
-
getProperty
-
setProperty
-
toBean
-
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对象或MaptargetSupplier- 目标的Bean创建器options- 属性拷贝选项- Returns:
- Bean对象
-
toBean
public static <T> T toBean(Class<T> beanClass, ValueProvider<String> valueProvider, CopyOptions copyOptions) ServletRequest 参数转Bean- Type Parameters:
T- Bean类型- Parameters:
beanClass- Bean ClassvalueProvider- 值提供者copyOptions- 拷贝选项,见CopyOptions- Returns:
- Bean
-
toBeanIgnoreError
-
toBeanIgnoreCase
-
fillBean
填充Bean的核心方法- Type Parameters:
T- Bean类型- Parameters:
bean- BeanvalueProvider- 值提供者copyOptions- 拷贝选项,见CopyOptions- Returns:
- Bean
-
fillBeanWithMap
使用Map填充Bean对象- Type Parameters:
T- Bean类型- Parameters:
map- Mapbean- BeanisIgnoreError- 是否忽略注入错误- Returns:
- Bean
-
fillBeanWithMap
public static <T> T fillBeanWithMap(Map<?, ?> map, T bean, boolean isToCamelCase, boolean isIgnoreError) 使用Map填充Bean对象,可配置将下划线转换为驼峰- Type Parameters:
T- Bean类型- Parameters:
map- Mapbean- BeanisToCamelCase- 是否将下划线模式转换为驼峰模式isIgnoreError- 是否忽略注入错误- Returns:
- Bean
-
fillBeanWithMapIgnoreCase
使用Map填充Bean对象,忽略大小写- Type Parameters:
T- Bean类型- Parameters:
map- Mapbean- BeanisIgnoreError- 是否忽略注入错误- Returns:
- Bean
-
fillBeanWithMap
使用Map填充Bean对象- Type Parameters:
T- Bean类型- Parameters:
map- Mapbean- BeancopyOptions- 属性复制选项CopyOptions- Returns:
- Bean
-
fillBeanWithMap
public static <T> T fillBeanWithMap(Map<?, ?> map, T bean, boolean isToCamelCase, CopyOptions copyOptions) 使用Map填充Bean对象- Type Parameters:
T- Bean类型- Parameters:
map- Mapbean- BeanisToCamelCase- 是否将Map中的下划线风格key转换为驼峰风格copyOptions- 属性复制选项CopyOptions- Returns:
- Bean
-
beanToMap
-
beanToMap
-
beanToMap
-
beanToMap
-
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:
- the Map
-
copyProperties
-
copyProperties
-
copyProperties
-
copyProperties
复制Bean对象属性 限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类- Parameters:
source- 源Bean对象target- 目标Bean对象copyOptions- 拷贝选项,见CopyOptions
-
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:
- the list
-
copyToList
复制集合中的Bean属性 此方法遍历集合中每个Bean,复制其属性后加入一个新的List中- Type Parameters:
T- Bean类型- Parameters:
collection- 原Bean集合targetType- 目标Bean类型- Returns:
- 复制后的List
-
isMatchName
-
trimStrFields
把Bean里面的String属性做trim操作。此方法直接对传入的Bean做修改。 通常bean直接用来绑定页面的input,用户的输入可能首尾存在空格,通常保存数据库前需要把首尾空格去掉- Type Parameters:
T- Bean类型- Parameters:
bean- Bean对象ignoreFields- 不需要trim的Field名称列表(不区分大小写)- Returns:
- 处理后的Bean对象
-
trimAllFields
-
replaceStrFields
-
hasModifier
是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)- Parameters:
clazz- 类modifierTypes- 修饰符枚举- Returns:
- 是否有指定修饰符, 如果有返回true, 否则false, 如果提供参数为null返回false
-
hasModifier
public static boolean hasModifier(Constructor<?> constructor, BeanKit.ModifierType... modifierTypes) 是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)- Parameters:
constructor- 构造方法modifierTypes- 修饰符枚举- Returns:
- 是否有指定修饰符, 如果有返回true, 否则false, 如果提供参数为null返回false
-
hasModifier
是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)- Parameters:
method- 方法modifierTypes- 修饰符枚举- Returns:
- 是否有指定修饰符, 如果有返回true, 否则false, 如果提供参数为null返回false
-
hasModifier
是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)- Parameters:
field- 字段modifierTypes- 修饰符枚举- Returns:
- 是否有指定修饰符, 如果有返回true, 否则false, 如果提供参数为null返回false
-
hasModifier
是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)- Parameters:
member- 构造、字段或方法modifierTypes- 修饰符枚举- Returns:
- 是否有指定修饰符,如果有返回true,否则false,如果提供参数为null返回false
-
isPublic
是否是Public成员,可检测包括构造、字段和方法- Parameters:
member- 构造、字段或方法- Returns:
- 是否是Public
-
isPublic
-
isProtected
是否是Protected成员,可检测包括构造、字段和方法- Parameters:
member- 构造、字段或方法- Returns:
- 是否是Protected
-
isStatic
是否是static成员,包括构造、字段或方法- Parameters:
member- 构造、字段或方法- Returns:
- 是否是static
-
isStatic
-
isSynthetic
是否是合成成员(由java编译器生成的)- Parameters:
member- 构造、字段或方法- Returns:
- 是否是合成字段
-
isSynthetic
是否是合成类(由java编译器生成的)- Parameters:
clazz- 类- Returns:
- 是否是合成
-
isAbstract
是否抽象成员- Parameters:
member- 构造、字段或方法- Returns:
- 是否抽象方法
-
isAbstract
-
isInterface
-
forEach
遍历Bean的属性- Parameters:
clazz- Bean类action- 每个元素的处理类
-
edit
-
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方法
-
isCommonFieldsEqual
-