code: public TypeDescriptor narrow(Object value) {
  		if (value == null) {
  			return this;
  		}
  		return new TypeDescriptor(value.getClass(), this.elementTypeDescriptor,
  				this.mapKeyTypeDescriptor, this.mapValueTypeDescriptor, this.annotations);
  	}
docs: Narrows this {@link TypeDescriptor} by setting its type to the class of the provided value.
  <p>If the value is {@code null}, no narrowing is performed and this TypeDescriptor is returned unchanged.
  <p>Designed to be called by binding frameworks when they read property, field, or method return values.
  Allows such frameworks to narrow a TypeDescriptor built from a declared property, field, or method return value type.
  For example, a field declared as {@code java.lang.Object} would be narrowed to {@code java.util.HashMap}
  if it was set to a {@code java.util.HashMap} value. The narrowed TypeDescriptor can then be used to convert
  the HashMap to some other type. Annotation and nested type context is preserved by the narrowed copy.
  @param value the value to use for narrowing this type descriptor
  @return this TypeDescriptor narrowed (returns a copy with its type updated to the class of the provided value)