ArrayList 添加的项将替换为 for 循环中的下一项



我面临着一个非常奇怪的情况。我在循环中将一个对象添加到 arrayList,但它被下一个对象替换。实际上第二个项目是重复的。(它替换第一项,并将另一个对象插入到数组列表中。

这是我的代码。我已经完成了调试,并在需要时添加了注释。有人可以指出为什么会发生这种情况吗?我正在从数据库中获取对象详细信息,这些详细信息按预期工作。

public class Serv
{
@Autowired
GrpHeader objGrpHeader;
@Autowired
CompPesoOutgoingMsg objMsg;
@Autowired
OutwardMessage objOutwardMessage;
public List<OutwardMessage> outgoingMessagesAsSingleTrx()
{
List<OutgoingMsg_Obj> trxList = myRepo.getTrx("5");
List<OutwardMessage> myTrxList = new ArrayList<>();

for (OutgoingMsg_Obj outgoingMsg : trxList)
{
BigDecimal trxAmt = outgoingMsg.getIntrBkSttlmAmt().getTrxn_amt();
trxAmt = (trxAmt).divide(new BigDecimal(100));
GrpHeader grpHeader = objGrpHeader;
CompPesoOutgoingMsg outMsg2 = objMsg;
OutwardMessage objOutwardMessage2 = objOutwardMessage;
outgoingMsg.setRmtInf(objRmtInf);
outgoingMsg.setPmtTpInf(objPmtTpInf);
outMsg2.setHeader(grpHeader);
outMsg2.setCdtTrfTxInf(Arrays.asList(outgoingMsg));
objOutwardMessage2.setObjMsg(outMsg2);
**//Here, Correct object details are printed**
log.info("outwardMsg 100 {} ", objOutwardMessage2);
//Add Item to the list
myTrxList.add(objOutwardMessage2);
for (OutwardMessage outwardMsgx : myTrxList)
{
//1. When this loop executed first time, first object details are printed
//2. When printed second time, first added object is no more. And second added object is there twice.
log.info("outwardMsg 101 {} ", outwardMsgx);
}
}
return myTrxList;
}
}

您有一个引用。通过将objOutwardMessage2设置为objOutwardMessage,您只需更改引用中的数据。

由于每次迭代都不会创建新对象,因此每次都会替换相同的 objOutwardMessage2 值。

尝试

OutwardMessage objOutwardMessage2 = new OutwardMessage();

并将 objOutwardMessage 的值复制到新创建的 objOutwardMessage2 中。

最新更新