最近写程序,写了一段很傻的代码,还把自己给绕进去了。
先直接上代码片段:
FlowInstance flowInstance;
List<FlowInstance> flowInstanceList = new ArrayList<FlowInstance>();
Integer status = null;
long tempFlowInstanceId;
for(FlowInstanceEntity flowInstEntity : flowInstanceEntityList){
flowInstance = new FlowInstance();
status = flowInstEntity.getStatus();
tempFlowInstanceId = flowInstEntity.getFlowInstanceId();
flowInstEntity.setFlowInstanceId(null);
flowInstEntity.setStatus(null);
BeanUtils.copyProperties(flowInstEntity, flowInstance);
flowInstEntity.setFlowInstanceId(tempFlowInstanceId);
flowInstance.setFlowInstanceId(InstanceIDCovertor.convertFlowInstIdToString(flowInstEntity));
flowInstance.setStatus(FlowInstStatus.getDAGStatusByCode(status));
flowInstance.setGroupName(getGroupNameByGroupId(groupEntitys, flowInstEntity.getGroupId()));
flowInstanceList.add(flowInstance);
}
return flowInstanceList;
基本上就是取出list中对数据,加工一下重新组装成一个对象,又放进一个list中去,最后返回。
但是实际写代码对时候,犯了一个打错,也就是第一行,原来对错误写法是:
FlowInstance flowInstance = new FLowInstance();也就是说将创建对象实例在循环体外面执行,结果导致最后返回对list数据都是相同的。
想想其实很可笑,连最基本的集合存储都忽视了。
原因:我们知道集合对象中存储都是对象都引用,比如List flowList = new ArrayList(5); 分配了5个对象的空间,但是,往list中存放数据的时候,如果add进去的是相同的对象,不管后面循环的时候,如何改变对象的值,最终list中存放的对象都是相同的,都是和最后放进list的对象一样。