将source类中的属性值赋给target类中对应的属性

/**
     * 对象的属性值拷贝
     * <p>
     * 将source对象中的属性值赋值到target对象中的属性,属性名一样,类型一样
     * <p>
     * example:
     * <p>
     * source:
     * <p>
     * String name;
     * String address;
     * Integer age;
     * Date   birthday;
     * <p>
     * target:
     * String name;
     * String address;
     * String email
     * <p>
     * 结果: source name, address -> target name, address
     *
     * @param source
     * @param target
     */

思路:三步走,

第一步:获取source和target的全部属性,放入List集合中(为什么要放入List集合中,为了偷懒而已,大可以不放就是多写一层循环而已);

第二步:比较两个类中属性名是否相等,相等的话,执行第三步,不相等,继续遍历,直到遍历结束;

第三步:判断属性的类型是否相同,相同赋值,不相同继续遍历,直到遍历结束

代码如下:

public static void copy(Object s, Object t) {
        //TODO
        List<String> list_s = new ArrayList<>();
        List<String> list_t = new ArrayList<>();
        //获取s的Class对象
        Class clss = s.getClass();
        //获取t的Class对象
        Class clst = t.getClass();
        //获取s中所有属性,并加入到集合list_s中
        Field[] fields = clss.getDeclaredFields();
        for(Field ff : fields){
            list_s.add(ff.getName());
        }
        //获取t中所有属性,并加入到集合list_t中
        Field[] fieldt = clst.getDeclaredFields();
        for(Field ff : fieldt){
            list_t.add(ff.getName());
        }
        //遍历list_t集合,在list_s集合中查找是否含有t的属性,包含判断属性类型是否相同,相同赋值
        for(String ss : list_t){
            if(list_s.contains(ss)&&isEqualFieldType(s,t,ss)){
                sCopyt(s,t,ss);
            }
        }

    }
//判断二者属性类型是否相同
    public static boolean isEqualFieldType(Object o1,Object o2,String s){
        Class cls1 = o1.getClass();
        Class cls2 = o2.getClass();
        try {
            Field f1 = cls1.getDeclaredField(s);
            Field f2 = cls2.getDeclaredField(s);
            if(f1.getType().getName().equals(f2.getType().getName())){
                return true;
            }
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        return false;

    }
//将s中的属性值赋给t的属性值
    public static void sCopyt(Object o1,Object o2,String s){
        Class cls1 = o1.getClass();
        Class cls2 = o2.getClass();
        try {
      //获取对应的属性对象 Field f1
= cls1.getDeclaredField(s); Field f2 = cls2.getDeclaredField(s);
      //设置可见性 f1.setAccessible(
true); f2.setAccessible(true);
      //利用get和set方法进行赋值 f2.
set(o2,f1.get(o1)); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } }
原文地址:https://www.cnblogs.com/du001011/p/10778133.html