BeanUtils.copyProperties 拷贝一个类相同字段值到另一个类相同字段

需求:

        项目中,有两个类,没有继承关系,大部分字段相同,只有个别字段不同,现在一个类是有值的,需要将两个类中相同字段复制到另一个类中。

思路:

        本来准备自己写反射来实现,后来发现有一个类 BeanUtils.copyProperties 可以完美实现这个需求,这个类Maven仓库中有两个包都包含有,分别是

org.apache.commons.beanutils.BeanUtils
org.springframework.beans.BeanUtils

测试

首先准备两个实体类

TestObject1
class TestObject1{
    private Integer age;
    private String name;
    private Integer weight;

    public TestObject1(Integer age, String name, Integer weight) {
        this.age = age;
        this.name = name;
        this.weight = weight;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    public Integer getWeight() {
        return weight;
    }

    public void setWeight(Integer weight) {
        this.weight = weight;
    }
}
TestObject2
class TestObject2{
    private Integer age;
    private String name;


    public Integer getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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


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

然后开始测试



import org.springframework.beans.BeanUtils;

import java.lang.reflect.InvocationTargetException;


//import org.apache.commons.beanutils.BeanUtils;

//import java.lang.reflect.InvocationTargetException;

/**
 * @author mazheng
 * @className TestDemo
 * @date 2021/9/13 14:45
 * @description TODO
 */
public class TestDemo {
    //包org.apache.commons.beanutils.BeanUtils, 则结果是:
    //value2拷贝到value1上,即value2的值会覆盖到value1上;
    //
    //包org.springframework.beans.BeanUtils, 则结果是:
    //value1拷贝到value2上,即value1的值会覆盖到value2上。
    public static void main(String[] args)  {
        TestObject1 testObject1 = new TestObject1(1,"tom",16);
        //TestObject2 testObject2 = new TestObject2();
        TestObject2 testObject2 = new TestObject2();
        System.out.println("交换前的值》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》");
        System.out.println(testObject1);
        System.out.println(testObject2);
        BeanUtils.copyProperties(testObject1,testObject2);
        System.out.println("交换后的值》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》");
        System.out.println(testObject1);
        System.out.println(testObject2);
        System.out.println("更改后的值》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》");
        testObject1.setName("马汉三");
        System.out.println(testObject1);
        System.out.println(testObject2);

        //TestObject1 testObject1 = new TestObject1(1,"tom",16);
        //TestObject2 testObject2 = new TestObject2();
        //System.out.println("交换前的值》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》");
        //System.out.println(testObject1);
        //System.out.println(testObject2);
        //try {
        //    BeanUtils.copyProperties(testObject2,testObject1);
        //} catch (IllegalAccessException e) {
        //    e.printStackTrace();
        //} catch (InvocationTargetException e) {
        //    e.printStackTrace();
        //}
        //System.out.println("交换后的值》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》");
        //System.out.println(testObject1);
        //System.out.println(testObject2);

    }
}

结果

TestObject2{age=null, name='null'}
交换后的值》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
TestObject1{age=1, name='tom', weight=16}
TestObject2{age=1, name='tom'}
更改后的值》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
TestObject1{age=1, name='马汉三', weight=16}
TestObject2{age=1, name='tom'}

确实达到了我想要的结果

上面注释掉的代码是测试 org.apache.commons.beanutils.BeanUtils 类的代码,这个类根据idea的提示,参数跟spring的BeanUtils是相反的,这里要注意,此外,这个类并没有实现我的需求,调用方法之后没有复制成功,具体原因因为工作时间缘故没有去深究,这里记录一下,有时间再看看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值