int size = list.size(); Integer existIndex = -1; for (int index = 0; index < size; index++) { Photo photo = list.get(index); // 确保不会出现多个主图:如果已经找到了主图,把后面的都设置为“非主图”,防止前端验证失败,出现多个主图的情况 if (existIndex != -1) { photo.setCover(0); // list.set(index,photo); } Integer c = photo.getCover(); // 找到了主图 if (c != null && c.equals(1)) { existIndex = index; } }
上周五的时候,修改集合中的1个元素,获得第N对象,修改对象的属性,这个时候list中的对象属性就更改了,但是,在循环结束之后,发现list中的元素没有修改,又恢复原状了。必须通过list.set(index,photo); 才保证符合预期。
很奇怪,难道list.get,再修改不可行?
周末写了几个集合list的例子,发现都可以正常修改。
import java.util.ArrayList; import java.util.List; //测试,修改Java集合中的元素的属性 public class ListTest { public static void main(String[] args) { List<User> list1 = buildList(); list1.get(0).setName("name1"); list1.get(0).setAge(1); System.out.println(list1.get(0)); List<User> list2 = buildList(); User user2 = list2.get(0); user2.setName("name2"); user2.setAge(2); System.out.println(list2.get(0)); for (User user : list2) { user.setName("name3"); user.setAge(3); } System.out.println(list2.get(0)); updateList(list2); System.out.println(list2.get(0)); } private static void updateList(List<User> list2) { System.out.println(list2.get(0)); if (true) { for (User user : list2) { user.setName("name4"); user.setAge(4); } System.out.println(list2.get(0)); } System.out.println(list2.get(0)); } public static List<User> buildList() { List<User> list = new ArrayList<User>(); User user = new User(); user.setName("name"); list.add(user); return list; } } class User { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } }
通过例子可以看出,list修改方式没有问题。但是,为什么项目中的代码有问题呢?
今天是周一,再次debug,发现去掉list.set(index,photo); 结果是正确的。
这样我就搞不明白,上周五的代码问题呢。
无法复现问题,就只能“到此为止”了~