使用序列化进行深拷贝
先将对象进行序列化,再转成对象,以此进行深拷贝。
此方法有个缺陷:如果对象里有属性是不能序列化的,那么此属性就无法进行拷贝,属性值丢失,以下直接将此值进行了赋值。
public static <T> T deepCopyObject(T object, Class<T> clazz) {
try {
Gson gson = new GsonBuilder()
.enableComplexMapKeySerialization()
.serializeNulls()
.disableHtmlEscaping()
.create();
String jsonString = gson.toJson(object, clazz);
T copyObject = gson.fromJson(jsonString, clazz);
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
int index = field.getModifiers();
if (Modifier.isTransient(index)) {
field.set(copyObject, field.get(object));
}
}
return copyObject;
} catch (Exception e) {
logger.error(e, "exception when copy object");
return object;
}
}