【发布时间】:2020-09-20 18:13:39
【问题描述】:
我正面临一个非常奇怪的情况。我在循环中将一个对象添加到 arrayList,但它被下一个对象替换。实际上第二项是重复的。 (它替换了第一项并将另一个对象插入到 ArrayList 中。)
这是我的代码。我已经完成了调试并在需要的地方包含了 cmets。有人能指出为什么会这样吗?我正在从数据库中获取对象详细信息,并且这些信息按预期工作。
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;
}
}
【问题讨论】:
-
您使用单个
objOutwardMessage。你只改变那个单一的对象。 (PS.:请放弃匈牙利的概念,这会让事情变得很难阅读) -
感谢您的回答。我对格式感到抱歉。知道如何解决吗?我对springboot有点陌生