how does it fit to ``hasValueChanged()`` in ``PropertyObserverInterface`` ?