Odd*_*Dev 0 java collections final
我有这个代码,我存储两个集合,然后添加一个事件监听器(这里没有lambda - 我需要坚持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);
}
});
Run Code Online (Sandbox Code Playgroud)
我最初调试了这个,并正确设置了集合.它不包含任何对象,因为代码刚刚初始化.
调试监听器(由于选择了项目而触发了事件)让我感到困惑.布尔debug1和debug2都是真的,因为收集selectedItems和unselectedItems根据项目选择更新.因此,事件源集合包含与声明的最终集合(selectedItems,unselectedItems)相同的项目.
这两个宣布的最终收藏品是否必须保持不变?
final只是意味着final无法更改已声明的变量,并且final无法继承该类.所有非原始变量都是Java中的引用,这意味着它们"指向"或引用对象的实例,但它们本身不是对象.
你所指的是一个不可变对象,它是一个final class所有字段都是final并且private没有setter 的实例.
希望这有助于澄清.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |