code: @SuppressWarnings("unchecked")
    public T withBackoff(Duration interval, Duration maxInterval, int intervalMultiplier) {
      Assert.notNull(interval, "interval");
      Assert.notNull(maxInterval, "maxInterval");
      Assert.isTrue(interval.length > 0, "The interval must be greater than 0");
      Assert.isTrue(interval.toNanoseconds() < maxInterval.toNanoseconds(),
          "The interval must be less than the maxInterval");
      Assert.isTrue(intervalMultiplier > 1, "The intervalMultiplier must be greater than 1");
      this.interval = interval;
      this.maxInterval = maxInterval;
      this.intervalMultiplier = intervalMultiplier;
      return (T) this;
    }
docs: Sets the {@code interval} to pause for between attempts, exponentially backing of to the
  {@code maxInterval} multiplying successive intervals by the {@code intervalMultiplier}.
  
  @throws NullPointerException if {@code interval} or {@code maxInterval} are null
  @throws IllegalArgumentException if {@code interval} is <= 0, {@code interval} is >=
  {@code maxInterval} or the {@code intervalMultiplier} is <= 1