循环往list中add对象却总是add的是一个对象
生活随笔
收集整理的這篇文章主要介紹了
循环往list中add对象却总是add的是一个对象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原因解釋:
- 在new 一個對象的時候,對象的ID是唯一確定的;
- 將對象add入list中時,放入list中的其實是對象的引用 ;
- 而每次循環只是簡單 的set 對象的屬性,set新的屬性值,而add進list中的對象還是同一個對象id,也就是同一個對象;
所以每次add之后,list發現對象引用和之前元素一樣,就覆蓋掉了之前add的對象。所以循環之后list中的對象是重復的對象。
解決方法:
想要避免這個問題只要每次add時保證對象引用都是不同的即可,即每循環一次重新new一個對象。new的對象應該放在for循環內,每循環一次重新new一個新對象
原來代碼:
for (String qcId : qcIds) {List<String> qcNames = qualityCheckDao.getQcNameByQcId(qcId);if(null==qcNames||qcNames.size()<=0){logger.error("質檢規則id沒有對應的規則名,借單號:" + checkBean.getBorrowNid()+",規則id:"+qcId);return new ResponseEntity(Constants.System.FAIL, "質檢規則id沒有對應的規則名,借單號:" + checkBean.getBorrowNid()+",規則id:"+qcId);}newCheckBean.setQcName(qcNames.get(0));qualityCheckBeans.add(newCheckBean);}解決代碼:
for (String qcId : qcIds) {QualityCheckBean newCheckBean = new QualityCheckBean();try {BeanUtils.copyProperties(newCheckBean,checkBean);} catch (Exception e) {e.printStackTrace();}List<String> qcNames = qualityCheckDao.getQcNameByQcId(qcId);if(null==qcNames||qcNames.size()<=0){logger.error("質檢規則id沒有對應的規則名,借單號:" + checkBean.getBorrowNid()+",規則id:"+qcId);return new ResponseEntity(Constants.System.FAIL, "質檢規則id沒有對應的規則名,借單號:" + checkBean.getBorrowNid()+",規則id:"+qcId);}newCheckBean.setQcName(qcNames.get(0));qualityCheckBeans.add(newCheckBean);}總結
以上是生活随笔為你收集整理的循环往list中add对象却总是add的是一个对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL中的UNIX_TIMESTAM
- 下一篇: idea 关于高亮显示与选中字符串相同的