重构代码。合理利用反射

不说其他的,先上代码

碰到下面场景

当oldUser的值不为空的时候,把oldUser的值赋给newUser
此时无法简单的使用BeanUtils的copyProperties方法。
private UserEntity copyNotNullEntity(){
		UserEntity newUser = new UserEntity();
		UserEntity oldUser = new UserEntity();
		//当oldUser的值不为空的时候,把oldUser的值赋给newUser
		if(StringUtils.isNotBlank(oldUser.getId())){
			newUser.setId(oldUser.getId());
		}
		if(StringUtils.isNotBlank(oldUser.getName())){
			newUser.setName(oldUser.getName());
		}
		if(StringUtils.isNotBlank(oldUser.getFullName())){
			newUser.setFullName(oldUser.getFullName());
		}
                if(StringUtils.isNotBlank(oldUser.getPassword())){
        	     newUser.setPassword(oldUser.getPassword());
                }
		if(StringUtils.isNotBlank(oldUser.getUserName())){
			newUser.setUserName(oldUser.getUserName());
		}
		BeanUtils.copyProperties(oldUser, newUser);
		
		return newUser;
}

看着这样的代码就感觉很乱。如果User类增加一个属性,就又需要增加一个判断。并不利于系统的扩展。

重构代码,合理利用BeanUtils。首先判断oldUser的值是否为空,如果为空,就把当前属性放入ignoreProperties中。

public static void copyNotNullPara(Object source,Object target) throws Exception{
		
	    List<String> ignoreProperties = new ArrayList<String>();
	    for (Field field : source.getClass().getDeclaredFields()) {
	    	field.setAccessible(true);
	    	Object value = field.get(source);
			if( value == null){
				ignoreProperties.add(field.getName());
			}
		}
		BeanUtils.copyProperties(source, target, ignoreProperties.toArray(new String[0]));
		
	}
首先获取source的反射的属性名的集合,遍历获取source的值。当值为null,把该属性放入排掉的ignoreProperties集合中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值