java实体类全部复制到新类及部分复制到新类

类的复制一般用这个方法

BeanUtils.copyProperties(classA, classB);

A表示资源类,就是被复制的类

B表示目标类,就是最后的结果类

这个方法也有个弊端,就是只能把A中所有的数据都复制到B里去。值为null的也会复制过去。如果之前为null的数据已经编辑过,此时就不能覆盖。

当然可以依次判断,然后一个个导入,如果数据多,那得累死。废话少说,上代码

public static Object updateDto(Object source, Object target) {
    Field[] sources = source.getClass().getDeclaredFields(); // 获取类的属性数组
    for (int i = 0; i < sources.length; i++) {
        String fieldName = sources[i].getName();
        try {
            String firstLetter = fieldName.substring(0, 1).toUpperCase();
            String getter = "get" + firstLetter + fieldName.substring(1);
            // 原 class 的属性值
            Method method = source.getClass().getMethod(getter, new Class[]{});
            Object value = method.invoke(source, new Object[]{});
            // 此处加判断
            if (null != value){
                // 被赋值的 class
                Class c = target.getClass();
                // 获取该类的成员变量
                Field f = c.getDeclaredField(fieldName);
                // 取消语言访问检查
                f.setAccessible(true);
                // 给变量赋值
                f.set(target, value);
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    return  target;
}

思路很简单,就是依次获取A类的属性和值,然后判断是否为空,不为空在替换。

你可能感兴趣的:(java,开发语言)