code: @Nullable
    public static <DSTTYPE> DSTTYPE convert (@Nonnull final ITypeConverterProvider aTypeConverterProvider,
                                             @Nullable final Object aSrcValue,
                                             @Nonnull final Class <DSTTYPE> aDstClass)
    {
      ValueEnforcer.notNull (aTypeConverterProvider, "TypeConverterProvider");
      ValueEnforcer.notNull (aDstClass, "DstClass");
  
      // Nothing to convert for null
      if (aSrcValue == null)
        return null;
  
      final Class <?> aSrcClass = aSrcValue.getClass ();
      final Class <?> aUsableDstClass = _getUsableClass (aDstClass);
  
      // First check if a direct cast is possible
      Object aRetVal;
      if (ClassHelper.areConvertibleClasses (aSrcClass, aUsableDstClass))
        aRetVal = aSrcValue;
      else
        aRetVal = _performConversion (aTypeConverterProvider, aSrcClass, aUsableDstClass, aSrcValue);
  
      // Done :)
      // Note: aUsableDstClass.cast (aRetValue) does not work on conversion from
      // "boolean" to "Boolean" whereas casting works
      return GenericReflection.uncheckedCast (aRetVal);
    }
docs: Convert the passed source value to the destination class, if a conversion
  is necessary.
  
  @param <DSTTYPE>
  The destination type.
  @param aTypeConverterProvider
  The type converter provider. May not be <code>null</code>.
  @param aSrcValue
  The source value. May be <code>null</code>.
  @param aDstClass
  The destination class to use.
  @return <code>null</code> if the source value was <code>null</code>.
  @throws TypeConverterException
  If no converter was found or if the converter returned a
  <code>null</code> object.
  @throws RuntimeException
  If the converter itself throws an exception