List list = new ArrayList(10);
IsuApiViews isuApiViews = new IsuApiViews();
page=super.findPage(page, isuViews);
List listView = page.getList();
int size = listView.size();
if (null!=listView&&size>0) {
for(IsuViews isuViewsNew:listView) {
isuApiViews.setIsuTopViews(isuViewsNew);
String id = isuViewsNew.getId();
IsuViews queryIsuView = new IsuViews();
queryIsuView.setViwTopId(id);
List<IsuViews> listSonViews = super.findList(queryIsuView);
isuApiViews.setIsuSonViewsList(listSonViews);
list.add(isuApiViews);
}
}
数据库查出是有3条不一样的数据,但是接口输出时出现3条一样的数据。
原因分析:isuApiViews 在for循环外部,说明从始至终只有一个isuApiViews 对象,在for循环里面每次虽然改变isuApiViews 属性值,但是list.add时添加的都是同一个对象。所以,后一个isuApiViews 变化的属性值会覆盖前面list.add里面的isuApiViews 。
所以输出的3条一样的数据,存的是同一个引用地址,指向同一个对象数据。
List list = new ArrayList(10);
page=super.findPage(page, isuViews);
List<IsuViews> listView = page.getList();
int size = listView.size();
if (null!=listView&&size>0) {
for(IsuViews isuViewsNew:listView) {
IsuApiViews isuApiViews = new IsuApiViews();
isuApiViews.setIsuTopViews(isuViewsNew);
String id = isuViewsNew.getId();
IsuViews queryIsuView = new IsuViews();
queryIsuView.setViwTopId(id);
List<IsuViews> listSonViews = super.findList(queryIsuView);
isuApiViews.setIsuSonViewsList(listSonViews);
list.add(isuApiViews);
}
}
new的操作放到for循环内部,每次都是新建一个对象。list.add存三个不同的引用,指向三个不同对象。所以list里面是三条不同的记录。