guava/src/com/google/common/util/concurrent/AbstractFuture.java
protected @Nullable String pendingToString() {
    Object localValue = value;
    if (localValue instanceof SetFuture) {
      return "setFuture=[" + userObjectToString(((SetFuture) localValue).future) + "]";
    } else if (this instanceof ScheduledFuture) {
      return "remaining delay=["
          + ((ScheduledFuture) this).getDelay(TimeUnit.MILLISECONDS)
          + " ms]";
    }
    return null;
  }
protected @Nullable String pendingToString() {
    Object localValue = value;
    if (localValue instanceof SetFuture) {
      return "setFuture=[" + userObjectToString(((SetFuture) localValue).future) + "]";
    } else if (this instanceof ScheduledFuture) {
      return "remaining delay=["
          + ((ScheduledFuture) this).getDelay(TimeUnit.MILLISECONDS)
          + " ms]";
    }
    return null;
  }
protected @ Nullable String pendingToString ( ) { Object localValue = value ; if ( localValue instanceof SetFuture ) { return "setFuture=[" + userObjectToString ( ( ( SetFuture ) localValue ) . future ) + "]" ; } else if ( this instanceof ScheduledFuture ) { return "remaining delay=[" + ( ( ScheduledFuture ) this ) . getDelay ( TimeUnit . MILLISECONDS ) + " ms]" ; } return null ; }
Provide a human-readable explanation of why this future has not yet completed.

@return null if an explanation cannot be provided because the future is done.
@since 23.0
Provide a human - readable explanation of why this future has not yet completed .