美文网首页
CombineBeansUtil:方法是用于相同对象不同属性值的

CombineBeansUtil:方法是用于相同对象不同属性值的

作者: LcYYYYYYYY | 来源:发表于2018-09-11 12:16 被阅读0次

今天碰到了两个Bean合并的案例。这里保留一份找来的工具类,修改了下。
注意:方法是用于相同对象不同属性值的合并

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * Description: 对象合并的工具类
 *
 * @author
 * @date 2018-09-11 上午11:27
 */
public class CombineBeansUtil {


    /**
     * 该方法是用于相同对象不同属性值的合并<br>
     * 如果两个相同对象中同一属性都有值,那么sourceBean中的值会覆盖tagetBean重点的值<br>
     * 如果sourceBean有值,targetBean没有,则采用sourceBean的值<br>
     * 如果sourceBean没有值,targetBean有,则保留targetBean的值
     * 
     * @param sourceBean    被提取的对象bean
     * @param targetBean    用于合并的对象bean
     * @return targetBean,合并后的对象
     */
    public static <T> T combineSydwCore(T sourceBean, T targetBean){
        Class sourceBeanClass = sourceBean.getClass();
        Class targetBeanClass = targetBean.getClass();

        Field[] sourceFields = sourceBeanClass.getDeclaredFields();
        Field[] targetFields = targetBeanClass.getDeclaredFields();
        for(int i=0; i<sourceFields.length; i++){
            Field sourceField = sourceFields[i];
            if(Modifier.isStatic(sourceField.getModifiers())){
                continue;
            }
            Field targetField = targetFields[i];
            if(Modifier.isStatic(targetField.getModifiers())){
                continue;
            }
            sourceField.setAccessible(true);
            targetField.setAccessible(true);
            try {
                if( !(sourceField.get(sourceBean) == null) &&  !"serialVersionUID".equals(sourceField.getName().toString())){
                    targetField.set(targetBean,sourceField.get(sourceBean));
                }
            } catch (IllegalArgumentException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return targetBean;
    }

}

相关文章

  • CombineBeansUtil:方法是用于相同对象不同属性值的

    今天碰到了两个Bean合并的案例。这里保留一份找来的工具类,修改了下。注意:方法是用于相同对象不同属性值的合并

  • Java学习笔记 30 - 反射的使用&不同对象的相同属

    使用反射,将不同对象的相同属性值相互赋值。总结三种实用方法:1)使用对象的get,set方法为属性赋值2)使用ja...

  • ES6对象扩展

    声明对象时,可以只写属性名,不写属性值 增加对象属性的方法 Object.is()属性 用于比较两个值是否相等 在...

  • Day014_笔记总结

    类中的内容:属性和方法 1.属性(保存值的): a.对象的属性:不同的对象对应的值可能不一样.这样的属性是对象属性...

  • 02_认识面向对象

    1.什么是类:对拥有相同属性和功能的方法的对象的封装类是抽象的类中相同的属性的值是不能确定的 2.什么是对象:对象...

  • 面向对象编程

    一,面向对象 1.什么是类(抽象) 对拥有相同属性和方法的对象的封装,类中相同的属性的值是不确定的。 2.什么是对...

  • Python 面向对象基础

    面向对象基础 1认识面向对象 1.1什么是类和对象 类是拥有共同属性和方法的封装 是抽象,而且相同的属性的值是不...

  • JavaScript-DOM-getAttribute&

    1.getAttribute方法可以获取Dom对象的属性值(主要用于获取自定义属性的值) 参数:属性名 返回值:对...

  • 08 js03 对象、包装类

    1、对象:【对象的属性和方法,方法存在的形式:属性为方法名/引用;属性值为函数体,对象的属性值可以是任何类型,原型...

  • Swift类和结构体

    1.结构体和类的对比1.1 相同点: 定义属性用于储存值 定义方法用于提供功能 定义下标用于通过下标语法访问值 定...

网友评论

      本文标题:CombineBeansUtil:方法是用于相同对象不同属性值的

      本文链接:https://www.haomeiwen.com/subject/lutugftx.html