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

被折叠的 条评论
为什么被折叠?



