背景介绍:
工作中在改一个需求时,用到了嵌套for循环 最终结果要返回一个对象列表,为了省事 内存for循环内没有new对象。最终返回结果出现了bug。
分析:
由于最内层加的for循环中没有new一个对象 导致 最内层的for循环 在符合条件循环时实际都是在循环设置同一个对象,导致出了问题。
示例:
for (RespDto dto : dtoList) { ExportData exportData = new BlueBillingRecordInfoExportData(); exportData.setA("***"); exportData.setB("***"); exportData.setC("***"); if(条件1){ for (int i = 0; i < itemList.size(); i++) { ExportData exportData2 = new BlueBillingRecordInfoExportData(); BeanUtils.copyProperties(exportData,exportData2); exportData2.setD("***"); exportData2.setE("***"); exportDataList.add(exportData2); } }else { exportDataList.add(exportData); }
结论:每一层for循环里都需要new一个对象,从而保证循环过程中不会一直在对一个对象的属性进行覆盖赋值, 可以通过BeanUtils.copyProperties(A,B)方法把外一层for循环中对象设置的字段值复制进新对象。