我有一个用例,我想绑定多个
ObservableValue
这是一个
Observable
,因为我实际上不感兴趣,价值的变化是什么,我只需要一种方法在它变化时得到通知。
这就是可观察的束缚,我想到:
BooleanBinding() {
{
super.bind(proxy.activeShipProperty());
INavigableVessel activeShip = proxy.getActiveShip();
super.bind(activeShip.getLoadBinding());
if (activeShip instanceof IShip) {
super.bind(((IShip) activeShip).travelState());
} else {
super.bind(((IConvoy) activeShip).getOrlegShip().travelState());
}
super.bind(date.dayDateBinding());
}
private boolean value = true;
@Override
protected boolean computeValue() {
value = !value;
return value;
}
};
然后是这个测试代码,以验证它是否按预期工作:
Observable observable = contentProvider.createObservable(ENoticeBoardType.SHIP_WARE_INFO, proxy);
IntegerProperty invalidationCounter = new SimpleIntegerProperty(0);
InvalidationListener listener = observable1 -> invalidationCounter.setValue(invalidationCounter.get() + 1);
observable.addListener(listener);
// When
dayBinding.invalidate();
loadBinding.invalidate();
travelState.set(EShipTravelState.ANCHOR);
activeVessel.set(mock(IShip.class));
// Then
assertEquals(4, invalidationCounter.get());
事实证明并非如此。第一次调用invalidate时,InvalidateCounter只增加一次。
但是当我从上面处理布尔绑定时
可观察值
,我可以添加一个ChangeListener:
ChangeListener listener = (obs, oldValue, newValue) -> invalidationCounter.setValue(invalidationCounter.get() + 1);
observable.addListener(listener);
// When
dayBinding.invalidate();
loadBinding.invalidate();
travelState.set(EShipTravelState.ANCHOR);
activeVessel.set(mock(IShip.class));
// Then
assertEquals(4, invalidationCounter.get());
这是意料之中的事。
我想知道/确认的是:当
可见的
变为无效后,它不会变回有效状态,因此可以再次变为有效状态。用一个
ChangeListener
但是,新值必须计算,因此
可观察值
重新生效。
根据这一观察,是否有任何用例我可以使用
Observable
?