JAVA 深拷贝工具类

本文探讨了Java中深拷贝的概念,详细解释了如何针对基本类型和引用类型进行深拷贝操作,并提供了一段通用的深拷贝工具类代码。适合对Java数据拷贝感兴趣的开发者。

Java 中基本类型与引用类型的深拷贝

适用于所有数据类型,直接上代码,欢迎提意见

 /**
     * 数据copy
     *
     * @param paramObject 入参
     * @return object
     */
    public static Object cloneObject(Object paramObject) {
        try {
            if (paramObject == null) {
                return null;
            }
            // Map<?, ?>
            if (paramObject instanceof Map) {

                Map<Object, Object> cloneMap = Maps.newHashMap();
                Map<?, ?> paramMap = (Map<?, ?>) paramObject;
                for (Map.Entry<?, ?> entry : paramMap.entrySet()) {
                    cloneMap.put(entry.getKey(), cloneObject(entry.getValue()));
                }
                return cloneMap;
            }
            // Collection<?>
            if (paramObject instanceof Collection) {
                Collection<?> originCollection = (Collection<?>) paramObject;
                // copy 容器
                Collection<Object> cloneColl = CollUtil.create(paramObject.getClass());
                for (Object object : originCollection) {
                    cloneColl.add(cloneObject(object));
                }
                return cloneColl;
            }
            // 数组 Object[]
            if (paramObject.getClass().isArray()) {
                Object[] array = (Object[]) paramObject;
                if (CollUtil.isEmpty(Arrays.stream(array).iterator())) {
                    return array;
                }
                Object[] copyArray = new Object[array.length];
                Class<?> componentType = ArrayUtil.getComponentType(array);
                boolean simpleValueType = BeanUtils.isSimpleValueType(componentType);
                if (simpleValueType) {
                    return array.clone();
                }
                for (int i = 0; i < array.length; i++) {
                    copyArray[i] = cloneObject(array[i]);
                }
                return copyArray;
            }
            // 基本类型 
            boolean simpleValueType = BeanUtils.isSimpleValueType(paramObject.getClass());
            if (simpleValueType) {
                return paramObject;
            }
            // 自定义类(可采用fastjson方式)
            JSONObject json = new JSONObject(paramObject);
            return json.toBean(paramObject.getClass());
        } catch (Exception e) {
            log.info("[数据克隆]克隆失败,paramObject:{}", paramObject, e);
            return paramObject;
        }


    }
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值