java 复制对象和复制对象属性

Posted 探讨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 复制对象和复制对象属性相关的知识,希望对你有一定的参考价值。

    /**
     * 复制对象属性(对象类型必须相同)
     * 
     * @param orig 资源对象
     * @param dest 目标对象
     * @param clazz 源对象类
     * @param ignoreNull 是否忽略空(true:忽略,false:不忽略)
     * @return
     */
    public static <T> T copyProperties(T orig, T dest, Class<?> clazz, boolean ignoreNull) {
        if (orig == null || dest == null)
            return null;
        if(!clazz.isAssignableFrom(orig.getClass()))
            return null;
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            try {
                field.setAccessible(true);
                Object value = field.get(orig);
                if(!java.lang.reflect.Modifier.isFinal(field.getModifiers())){
                    if(!(ignoreNull && value == null)){
                        field.set(dest, value);
                    }
                }
                field.setAccessible(false);
            } catch (Exception e) {
            }
        }
        
        if(clazz.getSuperclass() == Object.class){
            return dest;
        }
        
        return copyProperties(orig, dest, clazz.getSuperclass(), ignoreNull);
    }
    
    /**
     * 复制对象属性(对象类型必须相同)
     * @param orig 资源对象
     * @param dest 目标对象
     * @param ignoreNull 是否忽略空(true:忽略,false:不忽略)
     */
    public static <T> T copyProperties(T orig, T dest, boolean ignoreNull) {
        if (orig == null || dest == null)
            return null;
        return copyProperties(orig, dest, orig.getClass(), ignoreNull);
    }

    /**
     * 复制对象
     * @param src 资源对象
     * @return 新对象
     */
    @SuppressWarnings("unchecked")
    public static <T> T clone(T src){
        if(src == null){
            return null;
        }
        T newObject = null;
        try {
            newObject = (T) src.getClass().newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return copyProperties(src, newObject, false);
    }

 

以上是关于java 复制对象和复制对象属性的主要内容,如果未能解决你的问题,请参考以下文章

Java中,复制一个对象,有啥好的方法

java 反射实现不同对象相同属性值复制

单例模式之原型模式

java 中不同对象间的属性复制怎么实现?

利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils

Java反射 - 2(对象复制,父类域)