zoukankan      html  css  js  c++  java
  • 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);
        }
  • 相关阅读:
    css笔记
    js面向对象开发之--元素拖拽
    git命令笔记
    数据扁平化笔记。
    手写冒泡排序
    ant design-Table组件实现每一行某个特定字段连续相同进行行合并。
    Array.prototype.reduce()。
    I/O多路复用
    TCP/IP四层体系结构
    TCP的三次握手和四次挥手,为什么?
  • 原文地址:https://www.cnblogs.com/piaoyf/p/5612053.html
Copyright © 2011-2022 走看看