最近遇到一个坑,之前的代码将一个订单对象中的明细,一个list,进行了分组。然后这个list就改变了。再往后,他们认为这个list没变,又将这个list作为最终数据进行了发送。这就导致这个明细回传错误。

查出问题后,我就想,将这个对象如果赋值一份的吧。应该就没问题了。

这里,一定要实现深复制,不然只进行浅复制的话,list内的值还是使用的同一块内存中的。进行分组后,原参数还是会被改变。

所以这里我想到用fastjson提供的序列化能力,先将对象序列化成一个json字符串,然后再反序列化回来。

这样,相当于按照一个字符串序列化了一个新对象,开辟了一个新的内存用于存放这个对象的堆内存内容。这就不会导致原有对象的改变了。

具体代码很简单:

String listStr = JSONObject.toJSONString(param.getDetailItems());
List<Dto> list = JSONObject.parseArray(listStr,Dto.class);

目前这方案是没有问题的。这期间我也了解了很多关于对象复制的问题。后续会找机会把最近找到的对象复制的相关内容写一个博客。

GitHub 加速计划 / fastj / fastjson
3
1
下载
FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
最近提交(Master分支:2 个月前 )
c942c834 - 2 年前
5bc4709b - 2 年前
Logo

新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐