@Override
    public Future<T> recover(ThrowableFunction1<Throwable, T> recoverFunction) {
        Validator.requireNonNull(recoverFunction, "Null is not a valid function");
        // Create new future expected to hold the value of the mapped type
        FutureImpl<T> future = new FutureImpl<>();

        // installs a handler that will automatically recover the result/Try should it be needed
        onComplete(t -> future.complete(t.recover(recoverFunction)));

        return future;
    }
@Override
    public Future<T> recover(ThrowableFunction1<Throwable, T> recoverFunction) {
        Validator.requireNonNull(recoverFunction, "Null is not a valid function");
        
        FutureImpl<T> future = new FutureImpl<>();

        
        onComplete(t -> future.complete(t.recover(recoverFunction)));

        return future;
    }
@ Override public Future < T > recover ( ThrowableFunction1 < Throwable , T > recoverFunction ) { Validator . requireNonNull ( recoverFunction , "Null is not a valid function" ) ; // Create new future expected to hold the value of the mapped type FutureImpl < T > future = new FutureImpl <> ( ) ; // installs a handler that will automatically recover the result/Try should it be needed onComplete ( t -> future . complete ( t . recover ( recoverFunction ) ) ) ; return future ; }
/*
(non-Javadoc)

@see javascalautils.concurrent.Future#recover(java.util.function.Function)
/ * ( non - Javadoc )