Ich habe ein Person-Objekt, das initialisiert wurde, und wenn ich die Methode wie getName anrufe, kann ich sie abrufen.Wenn ich zu ArrayList hinzufüge, fügt es die Hauptanmerkliste hinzu, nicht die Objekte
public Person(String fName, String lName, List<Role> roleList) {
this.firstName = fName;
this.lastName = lName;
this.roleList = new ArrayList<Role>();
}
Jede Person muss eine Liste von Rollen haben, so dass ich eine Liste genannt haben roleList
die ich List<Role> roleList = new ArrayList();
initialisieren zu verwenden, wenn es erstellt als
testDriver = new Person("Mike", "Joy", testRoleList);
testDriver2 = new Person("Rich", "Johns", testRoleList);
In meiner Berufung Klasse übergeben wird i möchte nur diesen Mitarbeitern ein Element hinzufügen testRoleList
. Für diesen Test habe ich testRoleList
veröffentlicht, aber ich habe einen Getter, der die testRoleList
abruft;
Role roleToAdd = Role.DRIVER;
// Only add the new role to the test driver
testDriver.testRoleList.add(roleToAdd);
Aber wenn man diese laufen tut es die Rolle hinzufügen, aber wenn ich versuche, die Größe der Testfahrer und testDriver2 Liste abzurufen mit:
System.out.println(testDriver.testRoleList.size());
System.out.println(testDriver2.testRoleList.size());
Die resultierende Liste Größe 1 für beide Liste obwohl ich testDriver2 keine Rolle hinzugefügt habe.
Wie kann ich nur die Rolle in dem nur Testfahrer oder einfach testDriver2
Da wir nicht den komplexen Code haben (Testfahrer ist eine Person Objekt, das keinen testRoleList aber eine roleList Eigenschaft hat) Ich bin ziemlich sicher, es ist nur ein Fehler im Code ... – loicmathieu
Es ist eigentlich kein Problem von Call-by-Value vs Anruf-by-Referenz. Das Problem scheint irgendwo in der Klasse "Person" zu liegen, z.B. 'roleList' ist statisch oder etw. so wie das. Außerdem initialisierst du 'roleList' im Konstruktor, aber fügst das Element zu 'testRoleList' hinzu, was eine völlig andere (und geteilte) Liste sein könnte. – Thomas
Ich habe es jetzt ausprobiert, indem ich im Person-Konstruktor this.testRoleList = roleList gesagt habe, welches der Parameter ist, an den es übergeben wird. aber ich bekomme immer noch die gleiche Listengröße, die es nur zu testRoleList hinzuzufügen scheint und nicht die Eigenschaft davon innerhalb der spezifischen Person. –