public static <T> Range<T> between(final T fromInclusive, final T toInclusive, final Comparator<T> comparator) {
        return new Range<>(fromInclusive, toInclusive, comparator);
    }
public static < T > Range < T > between ( final T fromInclusive , final T toInclusive , final Comparator < T > comparator ) { return new Range < > ( fromInclusive , toInclusive , comparator ) ; }
<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}