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);
        }
  • 相关阅读:
    Spring_3.1
    handler发消息的形式
    css元素排列
    利用Socket远程发送文件
    jtree添加节点
    url传参中文乱码
    struts action和jsp之间的传值
    Struts 404 The requested resource is not available
    tomcat server需要重启的时刻
    c++获取系统时间(引用别人的博文)
  • 原文地址:https://www.cnblogs.com/piaoyf/p/5612053.html
Copyright © 2011-2022 走看看