ObservableValue implements IObservableValue<VALUE_TYPE> { @Override public void setValue(final VALUE_TYPE value) { if (!NullCompatibleEquivalence.equals(this.value, value)) { this.value = value; fireChanged(); } } ObservableValue();  ObservableValue(final VALUE_TYPE value); @Override void setValue(final VALUE_TYPE value); @Override VALUE_TYPE getValue(); @Override final void addValueListener(final IObservableValueListener<?> listener); @Override final void removeValueListener(final IObservableValueListener<?> listener); @Override String toString();  }
@Test public void testEqualsHashCodeNotImplementedMissleading() { final ObservableValue<String> value = new ObservableValue<String>(); value.setValue(STRING_1); final Set<ObservableValue<String>> set = new HashSet<ObservableValue<String>>(); set.add(value); value.setValue(STRING_2); Assert.assertTrue(set.remove(value)); }