java中两个对象属性值复制,属性不需要一致的工具类

最近写代码,总是需要把一个对象转换一下给前端使用的对象,比如,前端某个属性是一个字符串,是逗号拼接的,我回传给前端是时候,需要新写一个对象,包含这个字符串处理后的字符串数组,然后要对其他属性赋值,很是麻烦,代码不美观,说不定可能还遗漏某个属性,所以我想起之前的一个工具类,但是找不到了,所以在网上找了一下,最后总结成自己的,希望对大家有所帮助!先放效果图,欢迎点赞和评论。。。

java中两个对象属性值复制,属性不需要一致的工具类_第1张图片

Person类

package com.kethink.springboot.object;

import java.util.Date;

/**
 * @Description :
 * @Author: xuxiaojun
 * @Date: Created in 2020/5/26 16:32
 */
public class Person {
    private static final long serialVersionUID = 1L;
    private String id;
    private String username;
    private String password;
    private Integer age;
    private Double height;
    private Date createtime;
    private Date updatetime;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Double getHeight() {
        return height;
    }
    public void setHeight(Double height) {
        this.height = height;
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    public Date getUpdatetime() {
        return updatetime;
    }
    public void setUpdatetime(Date updatetime) {
        this.updatetime = updatetime;
    }
    @Override
    public String toString() {
        return "Person{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", height=" + height +
                ", createtime=" + createtime +
                ", updatetime=" + updatetime +
                '}';
    }
}

PersonVO 类

package com.kethink.springboot.object;

import java.util.Arrays;
import java.util.Date;

/**
 * @Description :
 * @Author: xuxiaojun
 * @Date: Created in 2020/5/26 16:35
 */
public class PersonVO extends Person {
    private String[] childrenName;
    private Date birthday;
    public String[] getChildrenName() {
        return childrenName;
    }
    public void setChildrenName(String[] childrenName) {
        this.childrenName = childrenName;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    @Override
    public String toString() {
        return "PersonVO{" +
                "id='" + super.getId() + '\'' +
                ", username='" + super.getUsername() + '\'' +
                ", password='" + super.getPassword() + '\'' +
                ", age=" + super.getAge() +
                ", height=" + super.getHeight() +
                ", createtime=" + super.getCreatetime() +
                ", updatetime=" + super.getUpdatetime() +
                ", childrenName=" + Arrays.toString(childrenName) +
                ", birthday=" + birthday +
        '}';
    }
}

PersonDO类

package com.kethink.springboot.object;

import java.util.Date;

/**
 * @Description :
 * @Author: xuxiaojun
 * @Date: Created in 2020/5/26 17:15
 */
public class PersonDO {
    private static final long serialVersionUID = 1L;
    private String username;
    private String password;
    private Integer age;
    private Double height;
    private Date createtime;
    private Date updatetime;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Double getHeight() {
        return height;
    }
    public void setHeight(Double height) {
        this.height = height;
    }
    public Date getCreatetime() {
        return createtime;
    }
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    public Date getUpdatetime() {
        return updatetime;
    }
    public void setUpdatetime(Date updatetime) {
        this.updatetime = updatetime;
    }
    @Override
    public String toString() {
        return "PersonDO{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", height=" + height +
                ", createtime=" + createtime +
                ", updatetime=" + updatetime +
                '}';
    }
}

工具类:ConvertUtils.java

package com.kethink.springboot.object;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;

/**
 * @Description :
 * @Author: xuxiaojun
 * @Date: Created in 2020/5/26 16:37
 */
public class ConvertUtils {
    /**
     * Bean 转成 Bean , 属性不必对应
     * @param srcObj
     * @param destObj
     */
    public static  void  copyBeanToBean(Object srcObj,Object destObj){
        Map srcMap = new HashMap();
        Field[] srcFields = srcObj.getClass().getDeclaredFields();
        for (Field srcField : srcFields) {
            try {

                //去除static final属性(serialVersionUID)
                if (Modifier.isFinal(srcField.getModifiers())){
                    continue;
                }
                srcField.setAccessible(true);
                srcMap.put(srcField.getName(), srcField.get(srcObj)); //获取属性值
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        Field[] destFields = getAllFields(destObj.getClass());

        for (Field destField : destFields) {
            destField.setAccessible(true);
            if (srcMap.get(destField.getName()) == null) {
                continue;
            }
            try {
                destField.set(destObj, srcMap.get(destField.getName())); //给属性赋值
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * Map 转成 Bean , 属性不必对应
     * @param srcMap
     * @param destObj
     */
    public static  void  copyMapToBean(Map srcMap,Object destObj){
        Field[] destFields = getAllFields(destObj.getClass());

        for (Field destField : destFields) {
            destField.setAccessible(true);
            if (srcMap.get(destField.getName()) == null) {
                continue;
            }
            try {
                destField.set(destObj, srcMap.get(destField.getName())); //给属性赋值
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 获取该类的属性及父类属性
     * @param clazz
     * @return
     */
    private static Field[] getAllFields(Class clazz) {
        List fieldList = new ArrayList<>();
        while (clazz != null){
            fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
            clazz = clazz.getSuperclass();
        }
        Field[] fields = new Field[fieldList.size()];
        return fieldList.toArray(fields);
    }
}

测试类:TestCopy.java

package com.kethink.springboot.object;
import java.util.*;

/**
 * @Description :
 * @Author: xuxiaojun
 * @Date: Created in 2020/5/26 16:42
 */
public class TestCopy {
    public static void main(String[] args) {

        HashMap hashMap = new HashMap<>();
        hashMap.put("id",UUID.randomUUID().toString());
        hashMap.put("username","xxj01");
        hashMap.put("password","12301");
        hashMap.put("age",28);
        hashMap.put("height",1.70);
        hashMap.put("createtime",new Date());
        hashMap.put("updatetime",new Date());

        Person p = new Person();
        p.setId(UUID.randomUUID().toString());
        p.setUsername("xxj");
        p.setPassword("123");
        p.setAge(28);
        p.setHeight(1.70);
        p.setCreatetime(new Date());
        p.setUpdatetime(new Date());

        PersonVO personVO = new PersonVO();
        PersonDO personDO = new PersonDO();
        try {
            System.out.println(p.toString());
            ConvertUtils.copyBeanToBean(p,personVO);
            System.out.println(personVO.toString());
            ConvertUtils.copyBeanToBean(p,personDO);
            System.out.println(personDO.toString());
/*            System.out.println("--------------------------------------");
            ConvertUtils.copyBeanToBean(hashMap,personVO);
            System.out.println(personVO.toString());
            ConvertUtils.copyBeanToBean(hashMap,personDO);
            System.out.println(personDO.toString());
            ConvertUtils.copyMapToBean(hashMap,personVO);
            System.out.println(personVO.toString());
            ConvertUtils.copyMapToBean(hashMap,personDO);
            System.out.println(personDO.toString());*/
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 

你可能感兴趣的:(java,java,开发工具)