复制对象属性工具包

今天用到了复制对象属性的工具包,以做记录
public class CopyUtils {
    private static Logger log = LoggerFactory.getLogger(CopyUtils.class);

    /**
     * 复制对象属性
     *
     * @param srcObj     源对象
     * @param tarObj     目标对象
     * @param ignoreNull 是否忽略空属性。默认false,即复制空属性。
     */
    public static void copyObject(Object srcObj, Object tarObj, boolean... ignoreNull) {
        boolean flag = false;
        if (ignoreNull != null && ignoreNull.length > 0)
            flag = ignoreNull[0];
        try {
            copyProperty(srcObj, tarObj, flag);
        } catch (NoSuchFieldException | IllegalAccessException e) {
            log.error("RequestUtils.copyObject error", e);
        }
    }

    private static void copyProperty(Object srcObj, Object tarObj, boolean ignoreNull) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
        Class tarClass = tarObj.getClass();
        Class srcClass = srcObj.getClass();
        //该类所有的属性
        Field[] srcFields = srcClass.getDeclaredFields();
        //新的属性
        Field srcField;
        //老的属性
        Field tarField;
        for (Field f : srcFields) {
            //类中的属性名称
            String fieldName = f.getName();
            //通过属性名称获取属性
            srcField = srcClass.getDeclaredField(fieldName);
            //静态和final字段
            if (Modifier.isStatic(srcField.getModifiers()) || Modifier.isFinal(srcField.getModifiers()))
                continue;
            //获取属性的值时需要设置为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。
            //值为 false 则指示反射的对象应该实施 Java 语言访问检查。
            srcField.setAccessible(true);
            //根据属性获取对象上的值
            Object srcObject = srcField.get(srcObj);

            //过滤空的属性或者一些默认值
            if (srcObject == null && ignoreNull) {
                continue;
            }
            tarField = tarClass.getDeclaredField(fieldName);
            tarField.setAccessible(true);
            tarField.set(tarObj, srcObject);
        }
    }
}

使用过程

CopyUtils.copyObject(park, upPark, true);
            int upFlage = parkMapper.updateById(upPark);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值