首页 > 代码库 > JAVA对象任意深度克隆clone工具类分享

JAVA对象任意深度克隆clone工具类分享

原文:JAVA对象任意深度克隆clone工具类分享

源代码下载地址:http://www.zuidaima.com/share/1550463408114688.htm

JAVA对象任意深度克隆clone工具类分享

package com.zuidaima.n_app.util;  
  
import java.lang.reflect.Constructor;  
import java.lang.reflect.Field;  
import java.lang.reflect.InvocationTargetException;  
import java.lang.reflect.Modifier;  
import java.util.Arrays;  
import java.util.Collection;  
import java.util.HashSet;  
import java.util.Map;  
import java.util.Set;  
  
/** 
 * 克隆工具类 
 * @author lujijiang@gmail.com www.zuidaima.com
 * 
 */  
public class Clone {  
    /** 
     * 无需进行复制的特殊类型数组 
     */  
    static Class[] needlessCloneClasses = new Class[]{String.class,Boolean.class,Character.class,Byte.class,Short.class,  
        Integer.class,Long.class,Float.class,Double.class,Void.class,Object.class,Class.class  
    };  
    /** 
     * 判断该类型对象是否无需复制 
     * @param c 指定类型 
     * @return 如果不需要复制则返回真,否则返回假 
     */  
    private static boolean isNeedlessClone(Class c){  
        if(c.isPrimitive()){//基本类型  
            return true;  
        }  
        for(Class tmp:needlessCloneClasses){//是否在无需复制类型数组里  
            if(c.equals(tmp)){  
                return true;  
            }  
        }  
        return false;  
    }  
      
    /** 
     * 尝试创建新对象 
     * @param c 原始对象 
     * @return 新的对象 
     * @throws IllegalAccessException 
     */  
    private static Object createObject(Object value) throws IllegalAccessException{  
            try {  
                return value.getClass().newInstance();  
            } catch (InstantiationException e) {  
                return null;  
            } catch (IllegalAccessException e) {  
                throw e;  
            }  
    }  
      
    /** 
     * 复制对象数据 
     * @param value 原始对象 
     * @param level 复制深度。小于0为无限深度,即将深入到最基本类型和Object类级别的数据复制; 
     * 大于0则按照其值复制到指定深度的数据,等于0则直接返回对象本身而不进行任何复制行为。 
     * @return 返回复制后的对象 
     * @throws IllegalAccessException 
     * @throws InstantiationException 
     * @throws InvocationTargetException 
     * @throws NoSuchMethodException 
     */  
    public static Object clone(Object value,int level) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException{  
        if(value=http://www.mamicode.com/=null){  >

 

JAVA对象任意深度克隆clone工具类分享