code: private Object getElementValueConvertedToValueType(Element element) {
          Class<?> elementValueType = element.getValueType();
          if (elementValueType == null) {
              return null;
          }
  
          List<String> values = element.getValue();
          if (element instanceof ElementWithValueConversion) {
              Object converted = ((ElementWithValueConversion) element).getConvertedValue();
  
              if (converted != null && !elementValueType.isAssignableFrom(converted.getClass())) {
                  throw new IllegalStateException("The value type for the element with id " + element.getId() + " is " + elementValueType.getName() + " but the converted value returned by its ElementWithValueConversion implementation is " + converted.getClass().getName());
              }
  
              return converted;
          } else if (values != null) {
              List<Object> convertedValues = new ArrayList<>();
  
              for (String value : values) {
                  Object convertedValue = convertBasicValue(value, elementValueType);
                  convertedValues.add(convertedValue);
              }
  
              if (element.isMultiValue()) {
                  return convertedValues;
              } else {
                  return UniformUtils.firstValue(convertedValues);
              }
          } else if (element.isMultiValue()) {
              return new ArrayList<>();
          } else {
              return null;
          }
      }
docs: Converts the value of the given element to its target value type. Simple types conversion is supported by the form. For other complex types the form relies on the element implementing
  {@link ElementWithValueConversion} interface.
  
  @param element Element to extract converted value
  @return Converted value