code: private void checkArgumentRange(final Object argumentValue) {
          // Only validate numeric types because we have already ensured at constructor time that only numeric types have bounds
          if (!Number.class.isAssignableFrom(getUnderlyingFieldClass())) {
              return;
          }
  
          final Double argumentDoubleValue = (argumentValue == null) ? null : ((Number)argumentValue).doubleValue();
  
          // Check hard limits first, if specified
          if (hasBoundedRange() && isValueOutOfRange(argumentDoubleValue)) {
              throw new CommandLineException.OutOfRangeArgumentValue(getLongName(), getMinValue(), getMaxValue(), argumentValue);
          }
  
          // Check recommended values
          if (hasRecommendedRange() && isValueOutOfRange(argumentDoubleValue)) {
              final boolean outMinValue = getMinRecommendedValue() != Double.NEGATIVE_INFINITY;
              final boolean outMaxValue = getMaxRecommendedValue() != Double.POSITIVE_INFINITY;
              if (outMinValue && outMaxValue) {
                  logger.warn("Argument --{} has value {}, but recommended within range ({},{})",
                          getLongName(), argumentDoubleValue, getMinRecommendedValue(), getMaxRecommendedValue());
              } else if (outMinValue) {
                  logger.warn("Argument --{} has value {}, but minimum recommended is {}",
                          getLongName(), argumentDoubleValue, getMinRecommendedValue());
              } else if (outMaxValue) {
                  logger.warn("Argument --{} has value {}, but maximum recommended is {}",
                          getLongName(), argumentDoubleValue, getMaxRecommendedValue());
              }
              // if there is no recommended value, do not log anything
          }
      }
docs: Check the provided value against any range constraints specified in the Argument annotation
  for the corresponding field. Throw an exception if limits are violated.
  
  - Only checks numeric types (int, double, etc.)