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);
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM