私は2つのコレクションを格納してから、イベントリスナーを追加します(ここでラムダはありません - Java 7に固執する必要があります)。最終的なコレクションがまだ更新されるのはなぜですか?
// 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);
}
});
私はこれを最初にデバッグして、コレクションが正しくセットアップされました。コードはちょうど初期化されたので、オブジェクトは含まれていませんでした。
リスナーをデバッグすると(アイテムが選択されたためにイベントが発生しました)、私は混乱しました。ブール値debug1
とdebug2
は、コレクションselectedItems
とunselectedItems
が項目の選択に従って更新されたため、両方とも真です。したがって、イベントソースコレクションには、宣言された最終コレクション(selectedItems
,unselectedItems
)と同じアイテムが含まれていました。
最終的に宣言された2つのコレクションをそのまま維持する必要はありませんか?
'final'のようなものは、*変数*は、それが参照するオブジェクトを変更することができないではないことを、変更することはできないと述べています。 – RealSkeptic
変数 'selectedItems'は' final'ですので、再割り当てはできません。しかし、それは 'コレクション'を '最終的なものにしません。 – SomeJavaGuy
また、更新されていますか?どのセットにも空のセットが含まれているので、それらのセットが空の場合、それらのブール値は「真」になります。 – RealSkeptic