把⼀个对象的属性赋值给另⼀个对象且忽略null值(属性名要相同)
在遇到需要将⼀个对象的部分属性值赋值(copy)给另外⼀个对象时,pyProperties(source,target) 可以⾮常⽅便的为我们解决这个问题(注意:BeanUtils是org.springframework.beans包下的)。其中source参数是源对象,target参数是⽬标对象。
这⾥举个栗⼦,直接上代码:数组全部赋值为1
public static void main(String[] args) {
User source = new User("张三", "男", 20);
User target = new User(null, null, null);
System.out.println("copy前的target:" + target);
System.out.println("copy后的target:" + target);
}
输出结果:
cool啊!可以看到已经把source的属性赋值给了target,难道这样就没问题了吗?NO!
如果你在实际开发中遇到下⾯这种情况:
public static void main(String[] args) {
User source = new User("张三", null, 20);
User target = new User(null, "男", null);
System.out.println("copy前的target:" + target);
System.out.println("copy后的target:" + target);
}
输出结果:
没错,确实也赋值了,但是原本sex属性有值,但是由于源对象的age为null,copy后直接把null覆盖掉了原有的值,这可怎么办【挠头】。
查看pyProperties()⽅法其实可以发现可以传⼊三个参数
第三个参数是⼀个String类型的数组,它的值其实就是我们需要忽略的那些null的属性名,如果能够动态拿到源对象中为null的属性名呢,可以另外封装⼀个⽅法:
public static String[] getNullPropertyNames(Object source) {
final BeanWrapper src = new BeanWrapperImpl(source);
java.beans.PropertyDescriptor[] pds = PropertyDescriptors();
Set<String> emptyNames = new HashSet<String>();
for (java.beans.PropertyDescriptor pd : pds) {
Object srcValue = Name());
if (srcValue == null) {
emptyNames.Name());
}
}
String[] result = new String[emptyNames.size()];
Array(result);
}
直接传⼊源对象,他返回的就是源对象中为null的属性名数组,我们来看看效果:public static void main(String[] args) {
User source = new User("张三", null, 20);
User target = new User(null, "男", null);
System.out.println("copy前的target:" + target);
//获取为null的属性名
String[] nullPropertyNames = com.NullPropertyNames(source);        System.out.println("source中为null的属性" + String(nullPropertyNames));
System.out.println("copy后的target:" + target);
}
输出结果:
完美解决!希望能对你有帮助噢~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。