code: public static <T> Range<T> between(final T fromInclusive, final T toInclusive, final Comparator<T> comparator) {
          return new Range<>(fromInclusive, toInclusive, comparator);
      }
docs: <p>Obtains a range with the specified minimum and maximum values (both inclusive).</p>
  
  <p>The range uses the specified {@code Comparator} to determine where
  values lie in the range.</p>
  
  <p>The arguments may be passed in the order (min,max) or (max,min).
  The getMinimum and getMaximum methods will return the correct values.</p>
  
  @param <T> the type of the elements in this range
  @param fromInclusive  the first value that defines the edge of the range, inclusive
  @param toInclusive  the second value that defines the edge of the range, inclusive
  @param comparator  the comparator to be used, null for natural ordering
  @return the range object, not null
  @throws IllegalArgumentException if either element is null
  @throws ClassCastException if using natural ordering and the elements are not {@code Comparable}