src/main/java/io/reactivex/Single.java
@CheckReturnValue
    @NonNull
    @SchedulerSupport(SchedulerSupport.NONE)
    public static <T> Single<T> unsafeCreate(SingleSource<T> onSubscribe) {
        ObjectHelper.requireNonNull(onSubscribe, "onSubscribe is null");
        if (onSubscribe instanceof Single) {
            throw new IllegalArgumentException("unsafeCreate(Single) should be upgraded");
        }
        return RxJavaPlugins.onAssembly(new SingleFromUnsafeSource<T>(onSubscribe));
    }
@CheckReturnValue
    @NonNull
    @SchedulerSupport(SchedulerSupport.NONE)
    public static <T> Single<T> unsafeCreate(SingleSource<T> onSubscribe) {
        ObjectHelper.requireNonNull(onSubscribe, "onSubscribe is null");
        if (onSubscribe instanceof Single) {
            throw new IllegalArgumentException("unsafeCreate(Single) should be upgraded");
        }
        return RxJavaPlugins.onAssembly(new SingleFromUnsafeSource<T>(onSubscribe));
    }
<strong>Advanced use only:</strong> creates a Single instance without
any safeguards by using a callback that is called with a SingleObserver.
<dl>
<dt><b>Scheduler:</b></dt>
<dd>{@code unsafeCreate} does not operate by default on a particular {@link Scheduler}.</dd>
</dl>
@param <T> the value type
@param onSubscribe the function that is called with the subscribing SingleObserver
@return the new Single instance
@throws IllegalArgumentException if {@code source} is a subclass of {@code Single}; such
instances don't need conversion and is possibly a port remnant from 1.x or one should use {@link #hide()}
instead.
@since 2.0