boolean updateValueType(Object value){
  if (_valueTypeFinallySet || value == null)   return _valueTypeFinallySet;
  Class<?> type=value.getClass();
  if (_valueType == null) {
synchronized (this) {
      if (_valueType == null)       _valueType=type;
    }
  }
 else   if (_valueType != type && !_valueType.isAssignableFrom(type)) {
synchronized (this) {
      _valueType=TypeDataIndex.getCommonSuperType(type,_valueType);
    }
  }
  if (_valueType == Object.class)   _valueTypeFinallySet=true;
  return _valueTypeFinallySet;
}

boolean updateValueType ( Object value ) { if ( _valueTypeFinallySet || value == null ) return _valueTypeFinallySet ; Class < ? > type = value . getClass ( ) ; if ( _valueType == null ) { synchronized ( this ) { if ( _valueType == null ) _valueType = type ; } } else if ( _valueType != type && ! _valueType . isAssignableFrom ( type ) ) { synchronized ( this ) { _valueType = TypeDataIndex . getCommonSuperType ( type , _valueType ) ; } } if ( _valueType == Object . class ) _valueTypeFinallySet = true ; return _valueTypeFinallySet ; }
set the value type if needed , returns true if the type is finally set
