有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    简单地说,你指的是同一个对象testRoleList,在你的两个对象testDrivertestDriver2

    在构造Person对象时,通过为每个Person对象构造不同的Role列表来传递角色列表

    从性能的角度来看,集合比列表更好

    如果角色有限且决定得当,可以使用EnumSet代替ArrayList。这里还需要为不同的Person对象初始化不同的EnumSet“Role”对象

    要避免同步问题,请使用Collections.synchronizedSet

    Set<MyEnum> s = Collections.synchronizedSet(EnumSet.noneOf(MyEnum.class));
    

    参考https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html