src/main/java/io/reactivex/Single.java
@CheckReturnValue
    @NonNull
    @SchedulerSupport(SchedulerSupport.NONE)
    public final Disposable subscribe(final Consumer<? super T> onSuccess, final Consumer<? super Throwable> onError) {
        ObjectHelper.requireNonNull(onSuccess, "onSuccess is null");
        ObjectHelper.requireNonNull(onError, "onError is null");

        ConsumerSingleObserver<T> observer = new ConsumerSingleObserver<T>(onSuccess, onError);
        subscribe(observer);
        return observer;
    }
@CheckReturnValue
    @NonNull
    @SchedulerSupport(SchedulerSupport.NONE)
    public final Disposable subscribe(final Consumer<? super T> onSuccess, final Consumer<? super Throwable> onError) {
        ObjectHelper.requireNonNull(onSuccess, "onSuccess is null");
        ObjectHelper.requireNonNull(onError, "onError is null");

        ConsumerSingleObserver<T> observer = new ConsumerSingleObserver<T>(onSuccess, onError);
        subscribe(observer);
        return observer;
    }
Subscribes to a Single and provides callbacks to handle the item it emits or any error notification it
issues.
<dl>
<dt><b>Scheduler:</b></dt>
<dd>{@code subscribe} does not operate by default on a particular {@link Scheduler}.</dd>
</dl>

@param onSuccess
the {@code Consumer<T>} you have designed to accept the emission from the Single
@param onError
the {@code Consumer<Throwable>} you have designed to accept any error notification from the
Single
@return a {@link Disposable} reference can request the {@link Single} stop work.
@see <a href="http://reactivex.io/documentation/operators/subscribe.html">ReactiveX operators documentation: Subscribe</a>
@throws NullPointerException
if {@code onSuccess} is null, or
if {@code onError} is null