Ich habe diesen Code, wo ich zwei Sammlungen speichern und dann einen Event-Listener hinzufügen (kein Lambda hier - ich muss bei Java 7 bleiben;)).Warum wird eine letzte Sammlung noch aktualisiert?
// rri is a ReturnRequestInterface
final Collection<BigDecimal> selectedItems = rri.getSelected();
final Collection<BigDecimal> unselectedItems = rri.getUnSelected();
rri.addInformationChangeEventListener(new ComponentInformationChangeListener() {
@Override
public void informationChange(RequestChangeEvent event) {
ReturnRequestInterface source = (ReturnRequestInterface) event.getSource();
boolean debug1 = source.getSelected().containsAll(selectedItems);
boolean debug2 = source.getUnSelected().containsAll(unselectedItems);
}
});
Ich habe dies zunächst debugged und die Sammlung wurde korrekt eingerichtet. Es enthielt keine Objekte, da der Code gerade initialisiert wurde.
Das Debuggen des Hörers (das Ereignis wurde ausgelöst, weil eine Elementauswahl vorgenommen wurde) hat mich verwirrt. Die Booleschen Werte debug1
und sind beide wahr, da die Auflistung selectedItems
und unselectedItems
entsprechend der Elementauswahl aktualisiert wurden. Die Ereignisquellensammlung enthielt also dieselben Elemente wie die deklarierten endgültigen Sammlungen (selectedItems
, unselectedItems
).
Müssen die beiden angemeldeten endgültigen Sammlungen nicht so bleiben wie sie sind?
'final' sagt, dass die * variabel * kann nicht geändert werden, nicht, dass das Objekt, um es bezieht sich nicht geändert werden kann. – RealSkeptic
Da die Variable 'selectedItems'' final' ist, kann sie nicht neu zugewiesen werden. Aber das macht deine "Sammlung" nicht endgültig. – SomeJavaGuy
Sind Sie sicher, dass sie aktualisiert wurden? Jeder Satz enthält eine leere Menge, so dass diese Booleans "wahr" sind, wenn diese Sätze leer sind. – RealSkeptic