Class DefaultSubscriber<T>
- java.lang.Object
-
- io.reactivex.rxjava3.subscribers.DefaultSubscriber<T>
-
- Type Parameters:
T
- the value typeExample
Flowable.range(1, 5) .subscribe(new DefaultSubscriber<Integer>() { @Override public void onStart() { System.out.println("Start!"); request(1); } @Override public void onNext(Integer t) { if (t == 3) { cancel(); } System.out.println(t); request(1); } @Override public void onError(Throwable t) { t.printStackTrace(); } @Override public void onComplete() { System.out.println("Done!"); } });
- All Implemented Interfaces:
FlowableSubscriber<T>
,org.reactivestreams.Subscriber<T>
- Direct Known Subclasses:
BlockingFlowableMostRecent.MostRecentSubscriber
public abstract class DefaultSubscriber<T> extends java.lang.Object implements FlowableSubscriber<T>
Abstract base implementation of aSubscriber
with support for requesting viarequest(long)
, cancelling via viacancel()
(both synchronously) and callsonStart()
when the subscription happens.All pre-implemented final methods are thread-safe.
The default
onStart()
requestsLong.MAX_VALUE
by default. Override the method to request a custom positive amount.Note that calling
request(long)
fromonStart()
may trigger an immediate, asynchronous emission of data toSubscriber.onNext(Object)
. Make sure all initialization happens before the call torequest()
inonStart()
. Callingrequest(long)
insideSubscriber.onNext(Object)
can happen at any time because by design,onNext
calls from upstream are non-reentrant and non-overlapping.Use the protected
cancel()
to cancel the sequence from within anonNext
implementation.Like all other consumers,
DefaultSubscriber
can be subscribed only once. Any subsequent attempt to subscribe it to a new source will yield anIllegalStateException
with message"It is not allowed to subscribe with a(n) <class name> multiple times."
.Implementation of
onStart()
,Subscriber.onNext(Object)
,Subscriber.onError(Throwable)
andSubscriber.onComplete()
are not allowed to throw any unchecked exceptions. If for some reason this can't be avoided, useFlowable.safeSubscribe(org.reactivestreams.Subscriber)
instead of the standardsubscribe()
method.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) org.reactivestreams.Subscription
upstream
-
Constructor Summary
Constructors Constructor Description DefaultSubscriber()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
cancel()
Cancels the upstream'sSubscription
.protected void
onStart()
Called once the subscription has been set on this observer; override this to perform initialization or issue an initial request.void
onSubscribe(org.reactivestreams.Subscription s)
Implementors of this method should make sure everything that needs to be visible inSubscriber.onNext(Object)
is established before callingSubscription.request(long)
.protected void
request(long n)
Requests from the upstreamSubscription
.
-
-
-
Method Detail
-
onSubscribe
public final void onSubscribe(org.reactivestreams.Subscription s)
Description copied from interface:FlowableSubscriber
Implementors of this method should make sure everything that needs to be visible inSubscriber.onNext(Object)
is established before callingSubscription.request(long)
. In practice this means no initialization should happen after therequest()
call and additional behavior is thread safe in respect toonNext
.- Specified by:
onSubscribe
in interfaceFlowableSubscriber<T>
- Specified by:
onSubscribe
in interfaceorg.reactivestreams.Subscriber<T>
-
request
protected final void request(long n)
Requests from the upstreamSubscription
.- Parameters:
n
- the request amount, positive
-
cancel
protected final void cancel()
Cancels the upstream'sSubscription
.
-
onStart
protected void onStart()
Called once the subscription has been set on this observer; override this to perform initialization or issue an initial request.The default implementation requests
Long.MAX_VALUE
.
-
-