Class BeanKit

java.lang.Object
org.aoju.bus.core.toolkit.BeanKit

public class BeanKit extends Object
Bean工具类 把一个拥有对属性进行set和get方法的类
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Details

    • BeanKit

      public BeanKit()
  • Method Details

    • isBean

      public static boolean isBean(Class<?> clazz)
      判断是否为Bean对象 判定方法是否存在只有一个参数的setXXX方法
      Parameters:
      clazz - 待测试类
      Returns:
      是否为Bean对象
    • isReadable

      public static boolean isReadable(Class<?> clazz)
      判断是否为可读的Bean对象,判定方法是:
           1、是否存在只有无参数的getXXX方法或者isXXX方法
           2、是否存在public类型的字段
       
      Parameters:
      clazz - 待测试类
      Returns:
      是否为可读的Bean对象
      See Also:
    • isEmpty

      public static boolean isEmpty(Object bean, String... ignoreFiledNames)
      判断Bean是否为空对象,空对象表示本身为null或者所有属性都为null
      Parameters:
      bean - Bean对象
      ignoreFiledNames - 忽略检查的字段名
      Returns:
      是否为空,true - 空 / false - 非空
    • isNotEmpty

      public static boolean isNotEmpty(Object bean, String... ignoreFiledNames)
      判断Bean是否为非空对象,非空对象表示本身不为null或者含有非null属性的对象
      Parameters:
      bean - Bean对象
      ignoreFiledNames - 忽略检查的字段名
      Returns:
      是否为空,true - 空 / false - 非空
    • hasNull

      public static boolean hasNull(Object bean)
      判断Bean中是否有值为null的字段
      Parameters:
      bean - Bean
      Returns:
      是否有值为null的字段
    • hasSetter

      public static boolean hasSetter(Class<?> clazz)
      判断是否有Setter方法 判定方法是否存在只有一个参数的setXXX方法
      Parameters:
      clazz - 待测试类
      Returns:
      是否为Bean对象
    • hasGetter

      public static boolean hasGetter(Class<?> clazz)
      判断是否为Bean对象 判定方法是否存在只有一个参数的getXXX方法
      Parameters:
      clazz - 待测试类
      Returns:
      是否为Bean对象
    • hasPublicField

      public static boolean hasPublicField(Class<?> clazz)
      指定类中是否有public类型字段(static字段除外)
      Parameters:
      clazz - 待测试类
      Returns:
      是否有public类型字段
    • hasNullField

      public static boolean hasNullField(Object bean)
      判断Bean是否包含值为null的属性 对象本身为null也返回true
      Parameters:
      bean - Bean对象
      Returns:
      是否包含值为null的属性,true - 包含 / false - 不包含
    • hasNullField

      public static boolean hasNullField(Object bean, String... ignoreFiledNames)
      判断Bean是否包含值为null的属性 对象本身为null也返回true
      Parameters:
      bean - Bean对象
      ignoreFiledNames - 忽略检查的字段名
      Returns:
      是否包含值为null的属性,true - 包含 / false - 不包含
    • trimStrField

      public static <T> T trimStrField(T bean, String... ignoreField)
      把Bean里面的String属性做trim操作

      通常bean直接用来绑定页面的input,用户的输入可能首尾存在空格,通常保存数据库前需要把首尾空格去掉

      Type Parameters:
      T - Bean类型
      Parameters:
      bean - Bean对象
      ignoreField - 不需要trim的Field名称列表(不区分大小写)
      Returns:
      the object
    • create

      public static DynamicBean create(Object bean)
      创建动态Bean
      Parameters:
      bean - 普通Bean或Map
      Returns:
      DynamicBean
    • findEditor

      public static PropertyEditor findEditor(Class<?> type)
      查找类型转换器 PropertyEditor
      Parameters:
      type - 需要转换的目标类型
      Returns:
      PropertyEditor
    • getBeanDesc

      public static BeanDesc getBeanDesc(Class<?> clazz)
      获取BeanDesc Bean描述信息
      Parameters:
      clazz - Bean类
      Returns:
      BeanDesc
    • descForEach

      public static void descForEach(Class<?> clazz, Consumer<? super PropertyDesc> action)
      遍历Bean的属性
      Parameters:
      clazz - Bean类
      action - 每个元素的处理类
    • getPropertyDescriptors

      public static PropertyDescriptor[] getPropertyDescriptors(Class<?> clazz) throws InstrumentException
      获得Bean字段描述数组
      Parameters:
      clazz - Bean类
      Returns:
      字段描述数组
      Throws:
      InstrumentException - 获取属性异常
    • getPropertyDescriptorMap

      public static Map<String,PropertyDescriptor> getPropertyDescriptorMap(Class<?> clazz, boolean ignoreCase)
      获得字段名和字段描述Map,获得的结果会缓存在 PropertyCache
      Parameters:
      clazz - Bean类
      ignoreCase - 是否忽略大小写
      Returns:
      字段名和字段描述Map
    • getPropertyDescriptor

      public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String fieldName)
      获得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

      public static Object getFieldValue(Object bean, String fieldNameOrIndex)
      获得字段值,通过反射直接获得字段值,并不调用getXXX方法 对象同样支持Map类型,fieldNameOrIndex即为key
      • Map: fieldNameOrIndex需为key,获取对应value
      • Collection: fieldNameOrIndex当为数字,返回index对应值,非数字遍历集合返回子bean对应name值
      • Array: fieldNameOrIndex当为数字,返回index对应值,非数字遍历数组返回子bean对应name值
      Parameters:
      bean - Bean对象
      fieldNameOrIndex - 字段名或序号,序号支持负数
      Returns:
      字段值
    • setFieldValue

      public static void setFieldValue(Object bean, String fieldNameOrIndex, Object value)
      设置字段值,,通过反射设置字段值,并不调用setXXX方法 对象同样支持Map类型,fieldNameOrIndex即为key
      Parameters:
      bean - Bean
      fieldNameOrIndex - 字段名或序号,序号支持负数
      value - 值
    • getProperty

      public static <T> T getProperty(Object bean, String expression)
      解析Bean中的属性值
      Type Parameters:
      T - 对象信息
      Parameters:
      bean - Bean对象,支持Map、List、Collection、Array
      expression - 表达式,例如:person.friend[5].name
      Returns:
      Bean属性值
      See Also:
    • setProperty

      public static void setProperty(Object bean, String expression, Object value)
      解析Bean中的属性值
      Parameters:
      bean - Bean对象,支持Map、List、Collection、Array
      expression - 表达式,例如:person.friend[5].name
      value - 值
      See Also:
    • toBean

      public static <T> T toBean(Object source, Class<T> clazz)
      对象或Map转Bean
      Type Parameters:
      T - Bean类型
      Parameters:
      source - Bean对象或Map
      clazz - 目标的Bean类型
      Returns:
      Bean对象
    • toBean

      public static <T> T toBean(Object source, Class<T> clazz, CopyOptions options)
      对象或Map转Bean
      Type Parameters:
      T - 转换的Bean类型
      Parameters:
      source - Bean对象或Map
      clazz - 目标的Bean类型
      options - 属性拷贝选项
      Returns:
      Bean对象
    • toBean

      public static <T> T toBean(Object source, Supplier<T> targetSupplier, CopyOptions options)
      对象或Map转Bean
      Type Parameters:
      T - 转换的Bean类型
      Parameters:
      source - Bean对象或Map
      targetSupplier - 目标的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 Class
      valueProvider - 值提供者
      copyOptions - 拷贝选项,见 CopyOptions
      Returns:
      Bean
    • toBeanIgnoreError

      public static <T> T toBeanIgnoreError(Object source, Class<T> clazz)
      对象或Map转Bean,忽略字段转换时发生的异常
      Type Parameters:
      T - 转换的Bean类型
      Parameters:
      source - Bean对象或Map
      clazz - 目标的Bean类型
      Returns:
      Bean对象
    • toBeanIgnoreCase

      public static <T> T toBeanIgnoreCase(Object source, Class<T> clazz, boolean ignoreError)
      对象或Map转Bean,忽略字段转换时发生的异常
      Type Parameters:
      T - 转换的Bean类型
      Parameters:
      source - Bean对象或Map
      clazz - 目标的Bean类型
      ignoreError - 是否忽略注入错误
      Returns:
      Bean对象
    • fillBean

      public static <T> T fillBean(T bean, ValueProvider<String> valueProvider, CopyOptions copyOptions)
      填充Bean的核心方法
      Type Parameters:
      T - Bean类型
      Parameters:
      bean - Bean
      valueProvider - 值提供者
      copyOptions - 拷贝选项,见 CopyOptions
      Returns:
      Bean
    • fillBeanWithMap

      public static <T> T fillBeanWithMap(Map<?,?> map, T bean, boolean isIgnoreError)
      使用Map填充Bean对象
      Type Parameters:
      T - Bean类型
      Parameters:
      map - Map
      bean - Bean
      isIgnoreError - 是否忽略注入错误
      Returns:
      Bean
    • fillBeanWithMap

      public static <T> T fillBeanWithMap(Map<?,?> map, T bean, boolean isToCamelCase, boolean isIgnoreError)
      使用Map填充Bean对象,可配置将下划线转换为驼峰
      Type Parameters:
      T - Bean类型
      Parameters:
      map - Map
      bean - Bean
      isToCamelCase - 是否将下划线模式转换为驼峰模式
      isIgnoreError - 是否忽略注入错误
      Returns:
      Bean
    • fillBeanWithMapIgnoreCase

      public static <T> T fillBeanWithMapIgnoreCase(Map<?,?> map, T bean, boolean isIgnoreError)
      使用Map填充Bean对象,忽略大小写
      Type Parameters:
      T - Bean类型
      Parameters:
      map - Map
      bean - Bean
      isIgnoreError - 是否忽略注入错误
      Returns:
      Bean
    • fillBeanWithMap

      public static <T> T fillBeanWithMap(Map<?,?> map, T bean, CopyOptions copyOptions)
      使用Map填充Bean对象
      Type Parameters:
      T - Bean类型
      Parameters:
      map - Map
      bean - Bean
      copyOptions - 属性复制选项 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 - Map
      bean - Bean
      isToCamelCase - 是否将Map中的下划线风格key转换为驼峰风格
      copyOptions - 属性复制选项 CopyOptions
      Returns:
      Bean
    • beanToMap

      public static Map<String,Object> beanToMap(Object bean)
      对象转Map,不进行驼峰转下划线,不忽略值为空的字段
      Parameters:
      bean - bean对象
      Returns:
      Map
    • beanToMap

      public static Map<String,Object> beanToMap(Object bean, String... properties)
      将bean的部分属性转换成map 可选拷贝哪些属性值,默认是不忽略值为null的值的。
      Parameters:
      bean - bean
      properties - 需要拷贝的属性值,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 - 目标的Map
      isToUnderlineCase - 是否转换为下划线模式
      ignoreNullValue - 是否忽略值为空的字段
      Returns:
      Map
    • beanToMap

      public static Map<String,Object> beanToMap(Object bean, Map<String,Object> targetMap, boolean ignoreNullValue, Editor<String> keyEditor)
      对象转Map 通过实现Editor 可以自定义字段值,如果这个Editor返回null则忽略这个字段,以便实现:
       1. 字段筛选,可以去除不需要的字段
       2. 字段变换,例如实现驼峰转下划线
       3. 自定义字段前缀或后缀等等
       
      Parameters:
      bean - bean对象
      targetMap - 目标的Map
      ignoreNullValue - 是否忽略值为空的字段
      keyEditor - 属性字段(Map的key)编辑器,用于筛选、编辑key
      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 - 目标的Map
      copyOptions - 拷贝选项
      Returns:
      the Map
    • copyProperties

      public static <T> T copyProperties(Object source, Class<T> clazz, String... ignoreProperties)
      按照Bean对象属性创建对应的Class对象,并忽略某些属性
      Type Parameters:
      T - 对象类型
      Parameters:
      source - 源Bean对象
      clazz - 目标Class
      ignoreProperties - 不拷贝的的属性列表
      Returns:
      目标对象
    • copyProperties

      public static void copyProperties(Object source, Object target, String... ignoreProperties)
      复制Bean对象属性 限制类用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类
      Parameters:
      source - 源Bean对象
      target - 目标Bean对象
      ignoreProperties - 不拷贝的的属性列表
    • copyProperties

      public static void copyProperties(Object source, Object target, boolean ignoreCase)
      复制Bean对象属性
      Parameters:
      source - 源Bean对象
      target - 目标Bean对象
      ignoreCase - 是否忽略大小写
    • copyProperties

      public static void copyProperties(Object source, Object target, CopyOptions copyOptions)
      复制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

      public static <T> List<T> copyToList(Collection<?> collection, Class<T> targetType)
      复制集合中的Bean属性 此方法遍历集合中每个Bean,复制其属性后加入一个新的List
      Type Parameters:
      T - Bean类型
      Parameters:
      collection - 原Bean集合
      targetType - 目标Bean类型
      Returns:
      复制后的List
    • isMatchName

      public static boolean isMatchName(Object bean, String beanClassName, boolean isSimple)
      给定的Bean的类名是否匹配指定类名字符串 如果isSimple为false,则只匹配类名而忽略包名 如果isSimple为true,则匹配包括包名的全类名
      Parameters:
      bean - Bean
      beanClassName - Bean的类名
      isSimple - 是否只匹配类名而忽略包名,true表示忽略包名
      Returns:
      是否匹配
    • trimStrFields

      public static <T> T trimStrFields(T bean, String... ignoreFields)
      把Bean里面的String属性做trim操作。此方法直接对传入的Bean做修改。 通常bean直接用来绑定页面的input,用户的输入可能首尾存在空格,通常保存数据库前需要把首尾空格去掉
      Type Parameters:
      T - Bean类型
      Parameters:
      bean - Bean对象
      ignoreFields - 不需要trim的Field名称列表(不区分大小写)
      Returns:
      处理后的Bean对象
    • trimAllFields

      public static void trimAllFields(Object bean)
      转义bean中所有属性为字符串的
      Parameters:
      bean - Object
    • replaceStrFields

      public static void replaceStrFields(Object bean)
      bean 中所有属性为字符串的进行\n\t\s处理
      Parameters:
      bean - Object
    • hasModifier

      public static boolean hasModifier(Class<?> clazz, BeanKit.ModifierType... modifierTypes)
      是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回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

      public static boolean hasModifier(Method method, BeanKit.ModifierType... modifierTypes)
      是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
      Parameters:
      method - 方法
      modifierTypes - 修饰符枚举
      Returns:
      是否有指定修饰符, 如果有返回true, 否则false, 如果提供参数为null返回false
    • hasModifier

      public static boolean hasModifier(Field field, BeanKit.ModifierType... modifierTypes)
      是否同时存在一个或多个修饰符(可能有多个修饰符,如果有指定的修饰符则返回true)
      Parameters:
      field - 字段
      modifierTypes - 修饰符枚举
      Returns:
      是否有指定修饰符, 如果有返回true, 否则false, 如果提供参数为null返回false
    • isPublic

      public static boolean isPublic(Field field)
      是否是Public字段
      Parameters:
      field - 字段
      Returns:
      是否是Public
    • isPublic

      public static boolean isPublic(Method method)
      是否是Public方法
      Parameters:
      method - 方法
      Returns:
      是否是Public
    • isPublic

      public static boolean isPublic(Class<?> clazz)
      是否是Public类
      Parameters:
      clazz - 类
      Returns:
      是否是Public
    • isPublic

      public static boolean isPublic(Constructor<?> constructor)
      是否是Public构造
      Parameters:
      constructor - 构造
      Returns:
      是否是Public
    • isStatic

      public static boolean isStatic(Field field)
      是否是static字段
      Parameters:
      field - 字段
      Returns:
      是否是static
    • isStatic

      public static boolean isStatic(Method method)
      是否是static方法
      Parameters:
      method - 方法
      Returns:
      是否是static
    • isStatic

      public static boolean isStatic(Class<?> clazz)
      是否是static类
      Parameters:
      clazz - 类
      Returns:
      是否是static
    • forEach

      public static void forEach(Class<?> clazz, Consumer<? super PropertyDesc> action)
      遍历Bean的属性
      Parameters:
      clazz - Bean类
      action - 每个元素的处理类
    • edit

      public static <T> T edit(T bean, Editor<Field> editor)
      编辑Bean的字段,static字段不会处理 例如需要对指定的字段做判空操作、null转""操作等等。
      Type Parameters:
      T - 被编辑的Bean类型
      Parameters:
      bean - bean
      editor - 编辑器函数
      Returns:
      the object
    • getFieldName

      public static String getFieldName(String getterOrSetterName)
      获取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

      public static boolean isCommonFieldsEqual(Object source, Object target, String... ignoreProperties)
      判断source与target的所有公共字段的值是否相同
      Parameters:
      source - 待检测对象1
      target - 待检测对象2
      ignoreProperties - 不需要检测的字段
      Returns:
      判断结果,如果为true则证明所有字段的值都相同