вызов вызывает вызов

я есть случай использования, где я хочу связать несколькоObservableValueна одинObservableТак как меня на самом деле не интересует, что такое изменение значения, мне нужны только средства, чтобы получать уведомления при его изменении.

Так что это Обязательный 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());

Оказывается, это не так. InvalidationCounter увеличивается только один раз при первом недействительном вызове.

Однако, когда я обрабатываю BooleanBinding сверху какObservableValueЯ могу добавить 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());

Это работает как ожидалось.

Что я хотел бы знать / подтвердил: InvalidationListener вызывается только один раз, когдаObservable становится недействительным, затем он не изменяется обратно на действительный, чтобы он мог снова стать действительным. СChangeListener однако новое значение должно быть вычислено, следовательно,ObservableValue снова становится действительным.

Исходя из этого наблюдения, есть ли какой-либо случай использования, где я действительно могу использоватьObservable?

Ответы на вопрос(1)

Ваш ответ на вопрос