code: @CheckReturnValue
      @SchedulerSupport(SchedulerSupport.NONE)
      public final <T2> Observable<T2> dematerialize() {
          @SuppressWarnings("unchecked")
          Observable<Notification<T2>> m = (Observable<Notification<T2>>)this;
          return RxJavaPlugins.onAssembly(new ObservableDematerialize<T2>(m));
      }
docs: Returns an Observable that reverses the effect of {@link #materialize materialize} by transforming the
  {@link Notification} objects emitted by the source ObservableSource into the items or notifications they
  represent.
  <p>
  <img width="640" height="335" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/dematerialize.png" alt="">
  <p>
  When the upstream signals an {@link Notification#createOnError(Throwable) onError} or
  {@link Notification#createOnComplete() onComplete} item, the
  returned Observable disposes of the flow and terminates with that type of terminal event:
  <pre><code>
  Observable.just(createOnNext(1), createOnComplete(), createOnNext(2))
  .doOnDispose(() -&gt; System.out.println("Disposed!"));
  .test()
  .assertResult(1);
  </code></pre>
  If the upstream signals {@code onError} or {@code onComplete} directly, the flow is terminated
  with the same event.
  <pre><code>
  Observable.just(createOnNext(1), createOnNext(2))
  .test()
  .assertResult(1, 2);
  </code></pre>
  If this behavior is not desired, the completion can be suppressed by applying {@link #concatWith(ObservableSource)}
  with a {@link #never()} source.
  <dl>
  <dt><b>Scheduler:</b></dt>
  <dd>{@code dematerialize} does not operate by default on a particular {@link Scheduler}.</dd>
  </dl>
  
  @param <T2> the output value type
  @return an Observable that emits the items and notifications embedded in the {@link Notification} objects
  emitted by the source ObservableSource
  @see <a href="http://reactivex.io/documentation/operators/materialize-dematerialize.html">ReactiveX operators documentation: Dematerialize</a>