code: @CheckReturnValue
      @SchedulerSupport(SchedulerSupport.NONE)
      public static <T> Observable<T> defer(Callable<? extends ObservableSource<? extends T>> supplier) {
          ObjectHelper.requireNonNull(supplier, "supplier is null");
          return RxJavaPlugins.onAssembly(new ObservableDefer<T>(supplier));
      }
docs: Returns an Observable that calls an ObservableSource factory to create an ObservableSource for each new Observer
  that subscribes. That is, for each subscriber, the actual ObservableSource that subscriber observes is
  determined by the factory function.
  <p>
  <img width="640" height="340" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/defer.png" alt="">
  <p>
  The defer Observer allows you to defer or delay emitting items from an ObservableSource until such time as an
  Observer subscribes to the ObservableSource. This allows an {@link Observer} to easily obtain updates or a
  refreshed version of the sequence.
  <dl>
  <dt><b>Scheduler:</b></dt>
  <dd>{@code defer} does not operate by default on a particular {@link Scheduler}.</dd>
  </dl>
  
  @param supplier
  the ObservableSource factory function to invoke for each {@link Observer} that subscribes to the
  resulting ObservableSource
  @param <T>
  the type of the items emitted by the ObservableSource
  @return an Observable whose {@link Observer}s' subscriptions trigger an invocation of the given
  ObservableSource factory function
  @see <a href="http://reactivex.io/documentation/operators/defer.html">ReactiveX operators documentation: Defer</a>