Loading

使用序列化进行深拷贝

先将对象进行序列化,再转成对象,以此进行深拷贝。
此方法有个缺陷:如果对象里有属性是不能序列化的,那么此属性就无法进行拷贝,属性值丢失,以下直接将此值进行了赋值。

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;
        }
    }
posted @ 2023-09-04 11:44  星流残阳  阅读(36)  评论(0编辑  收藏  举报