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);
        }
  • 相关阅读:
    使用junit进行单元测试
    初学软件工程.
    初学软件工程
    寻医问药软件
    使用JUnit工具进行单元测试
    软件工程问题
    JUnit进行单元测试
    软件工程学习问题
    单元测试
    软件工程
  • 原文地址:https://www.cnblogs.com/piaoyf/p/5612053.html
Copyright © 2011-2022 走看看