BeanUtils.copyProperties和BeanUtil.copyProperties的 使用实践

本文探讨了在Java中使用BeanUtils.copyProperties和BeanUtil.copyProperties进行对象属性拷贝时遇到的问题。当Dto到Vo的拷贝过程中参数名相同但类型不一致时,BeanUtils会忽略不匹配的属性,而BeanUtil则不会。通过测试代码展示了两者在处理类型不匹配时的不同行为,第二个条件检查了BeanUtil方法中输入参数类型与返回类型的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近涉及到了在 copyProperties 遇见了一些问题,从Dto 到 Vo的拷贝出现了问题(参数名相同,类型不一致)
使用BeanUtils 实现属性拷贝,在类型不同时,会忽略 target 对象相同命名参数的,而 Hutool 提供的BeanUtil则不会忽略

下面是我的测试代码

import cn.hutool.core.bean.BeanUtil;
import org.junit.Test;
import org.springframework.beans.BeanUtils;


public class HutoolPractice {

    @Test
    public void copyPropertie() {
        Dto dto = new Dto();
        dto.setId(10L);
        Vo vo = new Vo();
        BeanUtils.copyProperties(dto, vo);
        System.out.println("Spring CopyPropertie:" + vo.getId());
        BeanUtil.copyProperties(dto, vo);
        System.out.println("Hutool CopyPropertie:" + vo.getId());
    }

    class Dto {
        private Long id;

        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }
    }

    class Vo {
        private String id;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }
    }
}

下面是结果
在这里插入图片描述

BeanUtils.copyProperties 代碼如下,第二個條件校验了 set函数 的入参类型和 get函数 的返回类型是否相同

 if (readMethod != null && ClassUtils.isAssignable(writeMethod.getParameterTypes()[0], readMethod.getReturnType())){
 	...
 	writeMethod.invoke(target, value);
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值