两个字段名不同的实体,等位字段复制

特殊情况下,需要将两个字段不同的实体进行copy(例如:实体A的a,b,c字段需要复制到实体B的1,2,3 字段),且工作量较大时,可使用以下工具类

package com.ibbc.wzbank.service.image.utils;

import java.lang.reflect.Field;

public class EntityCopy {

    /**
     * 将source 对应各属性值复制到target   切记:两个实体属性值对应顺序不能更改,否则会导致复制错位   如 果target的字段数比source多的话,则以source的字段数为主,既如果source只有6个字段,则target也只能copy这6个字段
     * @param source
     * @param target
     * @return
     */
    public static Object copyField(Object source, Object target) {
        Field[] a = source.getClass().getDeclaredFields();
        Field[] b = target.getClass().getDeclaredFields();
        for (int i = 0; i < a.length; i++) {
            if (i<= (b.length-1)){
                a[i].setAccessible(true);
                Object o = null;
                try {
                    o = a[i].get(source);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                b[i].setAccessible(true);
                try {
                    b[i].set(target, o);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println(target);
        return target;
    }

  

}

测试案例

public static void main(String[] args) {
        dog dog = new dog();
        dog.setAge(12);
        dog.setType("二哈");
        dog.setName("哈哈");
        cat cat = new cat();
        copyField(dog,cat);
        System.out.println(cat);
    }


    public static class dog {
        private String name;
        private String type;
        private int age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }


        @Override
        public String toString() {
            return "dog{" +
                    "name='" + name + '\'' +
                    ", type='" + type + '\'' +
                    ", age=" + age +
                    '}';
        }
    }


    public static class cat{
        private String mingzi;
        private String leixing;
        private int nianling;

        public String getMingzi() {
            return mingzi;
        }

        public void setMingzi(String mingzi) {
            this.mingzi = mingzi;
        }

        public String getLeixing() {
            return leixing;
        }

        public void setLeixing(String leixing) {
            this.leixing = leixing;
        }

        public int getNianling() {
            return nianling;
        }

        public void setNianling(int nianling) {
            this.nianling = nianling;
        }

        @Override
        public String toString() {
            return "cat{" +
                    "mingzi='" + mingzi + '\'' +
                    ", leixing='" + leixing + '\'' +
                    ", nianling=" + nianling +
                    '}';
        }
    }

测试结果

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值