code: public void setValue(Object newValue) {
          Object checkedValue = checkValue(newValue);
          setDirty(isDifferent(baseValue, checkedValue));
          if (isDifferent(value, checkedValue)){ // firePropertyChange doesn't do this check sufficiently
              firePropertyChange(VALUE, value, value = checkedValue); // set inline to avoid recursion
          }
      }
docs: todo dk: think about specific method versions for each allowed type