java当我添加到arrayList时,它添加的是主注释列表,而不是对象
我有一个已初始化的Person对象,如果调用getName之类的方法,我可以检索它们
public Person( String fName, String lName, List<Role> roleList) {
this.firstName = fName;
this.lastName = lName;
this.roleList = new ArrayList<Role>();
}
每个人都需要一个角色列表,所以我有一个名为roleList
的列表,我使用List<Role> roleList = new ArrayList();
初始化它
创建时,它作为
testDriver = new Person("Mike", "Joy", testRoleList);
testDriver2 = new Person("Rich", "Johns", testRoleList);
在我的调用类中,我只想向该工作人员添加一项testRoleList
。对于这个测试,我已经公开了testRoleList
,但是我有一个getter来检索testRoleList
Role roleToAdd = Role.DRIVER;
// Only add the new role to the test driver
testDriver.testRoleList.add(roleToAdd);
但是,当您运行此命令时,它确实添加了角色,但是如果我尝试使用以下命令检索testDriver和testDriver2列表的大小:
System.out.println(testDriver.testRoleList.size());
System.out.println(testDriver2.testRoleList.size());
两个列表的结果列表大小都是1,尽管我还没有向testDriver2添加角色
我如何将角色添加到just testDriver或just testDriver2
# 1 楼答案
简单地说,你指的是同一个对象
testRoleList
,在你的两个对象testDriver
,testDriver2
中在构造
Person
对象时,通过为每个Person
对象构造不同的Role
列表来传递角色列表从性能的角度来看,集合比列表更好
如果角色有限且决定得当,可以使用
EnumSet
代替ArrayList
。这里还需要为不同的Person对象初始化不同的EnumSet“Role”对象要避免同步问题,请使用
Collections.synchronizedSet
参考https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html