一个List,通过迭代之后给List中的实体重新赋值,代码如下
1 public List getListByPage(Page currPage) { 2 Map recordTypeMap = BusnDataDir.recordTypeMap; 3 List infoList = currPage.getQueryResult(); 4 List<CollectNewsGroup> info = new ArrayList<CollectNewsGroup>(); 5 Iterator itr = infoList.iterator(); 6 while (itr.hasNext()){ 7 CollectNewsGroup news = new CollectNewsGroup(); 8 9 news = (CollectNewsGroup) itr.next(); 10 11 String userId = news.getUser(); 12 String recordType = news.getRecordType(); 13 14 SysUser sysUser = (SysUser) operInfoDAO.getObject(SysUser.class, userId); 15 String userName = sysUser.getUsername(); 16 17 18 19 String recordTypeName = (String) recordTypeMap.get(recordType); 20 news.setUser(userName); 21 news.setRecordType(recordTypeName); 22 23 info.add(news); 24 25 } 26 27 return info; 28 }
可是,当第一次循环之后,infoList 中的别的实体的值也变了,因为是二次开发,参照以前的代码实现,Debug以前的程序是没有问题的,所以百思不得其解,今天早上又打开程序,Debug进去,一看,才明白其中的原因:截图如下:
仔细观察,就会看见,Object中的id=133,有多项是相同的,即迭代重新赋值的时候,会把同一id中实体的值都改变。造成这个结果的原因是,在这个实体中我没有设置唯一的主键,把一个字段设为主键,但是它是可以重复的,所以就会造成这样的结果。
总而言之,对有些问题还是要深入的了解,如果明白迭代循环的原理就不会出现这样的情况了。
原文:http://www.cnblogs.com/sansanboy/p/3603171.html