Class CopyOptions

java.lang.Object
org.miaixz.bus.core.beans.copier.CopyOptions
All Implemented Interfaces:
Serializable

public class CopyOptions extends Object implements Serializable
属性拷贝选项 包括: 1、限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类 2、是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null 3、忽略的属性列表,设置一个属性列表,不拷贝这些属性值
Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected boolean
    是否自动转换为驼峰方式 此设置用于解决Bean和Map转换中的匹配问题而设置,并不是一个强制参数。 当map转bean时,如果map中是下划线等非驼峰模式,自动匹配对应的驼峰字段,避免出现字段不拷贝问题。 当bean转bean时,由于字段命名不规范,使用了非驼峰方式,增加兼容性。
    protected Converter
    自定义类型转换器,默认使用全局万能转换器转换
    protected Class<?>
    限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类 如果目标对象是Map,源对象是Bean,则作用于源对象上
    字段属性名和属性值编辑器,用于自定义属性转换规则(例如驼峰转下划线等),自定义属性值转换规则(例如null转""等)
    protected boolean
    是否忽略字段大小写
    protected boolean
    是否忽略字段注入错误
    protected boolean
    是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
    protected boolean
    是否覆盖目标值,如果不覆盖,会先读取目标对象的值,为null则写,否则忽略。如果覆盖,则不判断直接写
    protected boolean
    是否支持transient关键字修饰和@Transient注解,如果支持,被修饰的字段或方法对应的字段将被忽略。
  • Constructor Summary

    Constructors
    Constructor
    Description
    构造拷贝选项
    CopyOptions(Class<?> editable, boolean ignoreNullValue, String... ignoreProperties)
    构造拷贝选项
  • Method Summary

    Modifier and Type
    Method
    Description
    protected Object
    convertField(Type targetType, Object fieldValue)
    使用自定义转换器转换字段值 如果自定义转换器为null,则返回原值。
    editField(String fieldName, Object fieldValue)
    编辑字段值
    protected PropDesc
    findPropDesc(Map<String,PropDesc> targetPropDescMap, String sKeyStr)
    查找Map对应Bean的名称 尝试原名称、转驼峰名称、isXxx去掉is的名称
    设置忽略字段的大小写
    设置忽略字段的注入错误
    设置忽略空值,当源对象的值为null时,忽略而不注入此值
    of()
    创建拷贝选项
    of(Class<?> editable, boolean ignoreNullValue, String... ignoreProperties)
    创建拷贝选项
    setAutoTransCamelCase(boolean autoTransCamelCase)
    设置是否自动转换为驼峰方式 一般用于map转bean和bean转bean出现非驼峰格式时,在尝试转换失败的情况下,是否二次检查转为驼峰匹配。 此设置用于解决Bean和Map转换中的匹配问题而设置,并不是一个强制参数。 当map转bean时,如果map中是下划线等非驼峰模式,自动匹配对应的驼峰字段,避免出现字段不拷贝问题。 当bean转bean时,由于字段命名不规范,使用了非驼峰方式,增加兼容性。
    设置自定义类型转换器,默认使用全局万能转换器转换。
    setEditable(Class<?> editable)
    设置限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性
    设置字段属性编辑器,用于自定义属性转换规则,例如驼峰转下划线等 此转换器只针对源端的字段做转换,请确认转换后与目标端字段一致 当转换后的字段名为null时忽略这个字段 需要注意的是,当使用ValueProvider作为数据提供者时,这个映射是相反的,即参数中key为目标Bean的名称,而返回值是提供者中的key,并且对值的修改无效
    设置拷贝属性的字段映射,用于不同的属性之前拷贝做对应表用 需要注意的是,当使用ValueProvider作为数据提供者时,这个映射是相反的,即fieldMapping中key为目标Bean的名称,而value是提供者中的key
    setIgnoreCase(boolean ignoreCase)
    设置是否忽略字段的大小写
    setIgnoreError(boolean ignoreError)
    设置是否忽略字段的注入错误
    setIgnoreNullValue(boolean ignoreNullVall)
    设置是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
    setIgnoreProperties(String... ignoreProperties)
    设置忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值
    <P, R> CopyOptions
    设置忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值,Lambda方式
    setOverride(boolean override)
    设置是否覆盖目标值,如果不覆盖,会先读取目标对象的值,为null则写,否则忽略。如果覆盖,则不判断直接写
    属性过滤器,断言通过的属性才会被复制 BiPredicate.test(Object, Object)返回true则属性通过,false不通过,抛弃之
    setTransientSupport(boolean transientSupport)
    设置是否支持transient关键字修饰和@Transient注解,如果支持,被修饰的字段或方法对应的字段将被忽略。
    protected boolean
    测试是否保留字段,true保留,false不保留

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • editable

      protected Class<?> editable
      限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类 如果目标对象是Map,源对象是Bean,则作用于源对象上
    • ignoreNullValue

      protected boolean ignoreNullValue
      是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
    • ignoreError

      protected boolean ignoreError
      是否忽略字段注入错误
    • ignoreCase

      protected boolean ignoreCase
      是否忽略字段大小写
    • fieldEditor

      protected UnaryOperator<MutableEntry<String,Object>> fieldEditor
      字段属性名和属性值编辑器,用于自定义属性转换规则(例如驼峰转下划线等),自定义属性值转换规则(例如null转""等)
    • transientSupport

      protected boolean transientSupport
      是否支持transient关键字修饰和@Transient注解,如果支持,被修饰的字段或方法对应的字段将被忽略。
    • override

      protected boolean override
      是否覆盖目标值,如果不覆盖,会先读取目标对象的值,为null则写,否则忽略。如果覆盖,则不判断直接写
    • autoTransCamelCase

      protected boolean autoTransCamelCase
      是否自动转换为驼峰方式 此设置用于解决Bean和Map转换中的匹配问题而设置,并不是一个强制参数。
      1. 当map转bean时,如果map中是下划线等非驼峰模式,自动匹配对应的驼峰字段,避免出现字段不拷贝问题。
      2. 当bean转bean时,由于字段命名不规范,使用了非驼峰方式,增加兼容性。

      但是bean转Map和map转map时,没有使用这个参数,是因为没有匹配的必要,转map不存在无法匹配到的问题,因此此参数无效。

    • converter

      protected Converter converter
      自定义类型转换器,默认使用全局万能转换器转换
  • Constructor Details

    • CopyOptions

      public CopyOptions()
      构造拷贝选项
    • CopyOptions

      public CopyOptions(Class<?> editable, boolean ignoreNullValue, String... ignoreProperties)
      构造拷贝选项
      Parameters:
      editable - 限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性
      ignoreNullValue - 是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
      ignoreProperties - 忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值
  • Method Details

    • of

      public static CopyOptions of()
      创建拷贝选项
      Returns:
      拷贝选项
    • of

      public static CopyOptions of(Class<?> editable, boolean ignoreNullValue, String... ignoreProperties)
      创建拷贝选项
      Parameters:
      editable - 限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性
      ignoreNullValue - 是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
      ignoreProperties - 忽略的属性列表,设置一个属性列表,不拷贝这些属性值
      Returns:
      拷贝选项
    • setEditable

      public CopyOptions setEditable(Class<?> editable)
      设置限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性
      Parameters:
      editable - 限制的类或接口
      Returns:
      CopyOptions
    • setIgnoreNullValue

      public CopyOptions setIgnoreNullValue(boolean ignoreNullVall)
      设置是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
      Parameters:
      ignoreNullVall - 是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
      Returns:
      CopyOptions
    • ignoreNullValue

      public CopyOptions ignoreNullValue()
      设置忽略空值,当源对象的值为null时,忽略而不注入此值
      Returns:
      CopyOptions
    • setPropertiesFilter

      public CopyOptions setPropertiesFilter(BiPredicate<Field,Object> propertiesFilter)
      属性过滤器,断言通过的属性才会被复制 BiPredicate.test(Object, Object)返回true则属性通过,false不通过,抛弃之
      Parameters:
      propertiesFilter - 属性过滤器
      Returns:
      CopyOptions
    • setIgnoreProperties

      public CopyOptions setIgnoreProperties(String... ignoreProperties)
      设置忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值
      Parameters:
      ignoreProperties - 忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值
      Returns:
      CopyOptions
    • setIgnoreProperties

      public <P, R> CopyOptions setIgnoreProperties(FunctionX<P,R>... funcs)
      设置忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值,Lambda方式
      Type Parameters:
      P - 参数类型
      R - 返回值类型
      Parameters:
      funcs - 忽略的目标对象中属性列表,设置一个属性列表,不拷贝这些属性值
      Returns:
      CopyOptions
    • setIgnoreError

      public CopyOptions setIgnoreError(boolean ignoreError)
      设置是否忽略字段的注入错误
      Parameters:
      ignoreError - 是否忽略注入错误
      Returns:
      CopyOptions
    • ignoreError

      public CopyOptions ignoreError()
      设置忽略字段的注入错误
      Returns:
      CopyOptions
    • setIgnoreCase

      public CopyOptions setIgnoreCase(boolean ignoreCase)
      设置是否忽略字段的大小写
      Parameters:
      ignoreCase - 是否忽略大小写
      Returns:
      CopyOptions
    • ignoreCase

      public CopyOptions ignoreCase()
      设置忽略字段的大小写
      Returns:
      CopyOptions
    • setFieldMapping

      public CopyOptions setFieldMapping(Map<String,String> fieldMapping)
      设置拷贝属性的字段映射,用于不同的属性之前拷贝做对应表用 需要注意的是,当使用ValueProvider作为数据提供者时,这个映射是相反的,即fieldMapping中key为目标Bean的名称,而value是提供者中的key
      Parameters:
      fieldMapping - 拷贝属性的字段映射,用于不同的属性之前拷贝做对应表用
      Returns:
      CopyOptions
    • setFieldEditor

      public CopyOptions setFieldEditor(UnaryOperator<MutableEntry<String,Object>> editor)
      设置字段属性编辑器,用于自定义属性转换规则,例如驼峰转下划线等 此转换器只针对源端的字段做转换,请确认转换后与目标端字段一致 当转换后的字段名为null时忽略这个字段 需要注意的是,当使用ValueProvider作为数据提供者时,这个映射是相反的,即参数中key为目标Bean的名称,而返回值是提供者中的key,并且对值的修改无效
      Parameters:
      editor - 字段属性编辑器,用于自定义属性转换规则,例如驼峰转下划线等
      Returns:
      CopyOptions
    • editField

      protected MutableEntry<String,Object> editField(String fieldName, Object fieldValue)
      编辑字段值
      Parameters:
      fieldName - 字段名
      fieldValue - 字段值
      Returns:
      编辑后的字段值
    • setTransientSupport

      public CopyOptions setTransientSupport(boolean transientSupport)
      设置是否支持transient关键字修饰和@Transient注解,如果支持,被修饰的字段或方法对应的字段将被忽略。
      Parameters:
      transientSupport - 是否支持
      Returns:
      this
    • setOverride

      public CopyOptions setOverride(boolean override)
      设置是否覆盖目标值,如果不覆盖,会先读取目标对象的值,为null则写,否则忽略。如果覆盖,则不判断直接写
      Parameters:
      override - 是否覆盖目标值
      Returns:
      this
    • setAutoTransCamelCase

      public CopyOptions setAutoTransCamelCase(boolean autoTransCamelCase)
      设置是否自动转换为驼峰方式 一般用于map转bean和bean转bean出现非驼峰格式时,在尝试转换失败的情况下,是否二次检查转为驼峰匹配。 此设置用于解决Bean和Map转换中的匹配问题而设置,并不是一个强制参数。
      1. 当map转bean时,如果map中是下划线等非驼峰模式,自动匹配对应的驼峰字段,避免出现字段不拷贝问题。
      2. 当bean转bean时,由于字段命名不规范,使用了非驼峰方式,增加兼容性。

      但是bean转Map和map转map时,没有使用这个参数,是因为没有匹配的必要,转map不存在无法匹配到的问题,因此此参数无效。

      Parameters:
      autoTransCamelCase - 是否自动转换为驼峰方式
      Returns:
      this
    • setConverter

      public CopyOptions setConverter(Converter converter)
      设置自定义类型转换器,默认使用全局万能转换器转换。
      Parameters:
      converter - 转换器
      Returns:
      this
    • convertField

      protected Object convertField(Type targetType, Object fieldValue)
      使用自定义转换器转换字段值 如果自定义转换器为null,则返回原值。
      Parameters:
      targetType - 目标类型
      fieldValue - 字段值
      Returns:
      编辑后的字段值
    • testPropertyFilter

      protected boolean testPropertyFilter(Field field, Object value)
      测试是否保留字段,true保留,false不保留
      Parameters:
      field - 字段
      value - 值
      Returns:
      是否保留
    • findPropDesc

      protected PropDesc findPropDesc(Map<String,PropDesc> targetPropDescMap, String sKeyStr)
      查找Map对应Bean的名称 尝试原名称、转驼峰名称、isXxx去掉is的名称
      Parameters:
      targetPropDescMap - 目标bean的属性描述Map
      sKeyStr - 键或字段名
      Returns:
      PropDesc