Class CompletableSubject
- All Implemented Interfaces:
CompletableObserver,CompletableSource
This subject does not have a public constructor by design; a new non-terminated instance of this
CompletableSubject can be created via the create() method.
Since the CompletableSubject is conceptionally derived from the Processor type in the Reactive Streams specification,
nulls are not allowed (Rule 2.13)
as parameters to onError(Throwable).
Even though CompletableSubject implements the CompletableObserver interface, calling
onSubscribe is not required (Rule 2.12)
if the subject is used as a standalone source. However, calling onSubscribe
after the CompletableSubject reached its terminal state will result in the
given Disposable being disposed immediately.
All methods are thread safe. Calling onComplete() multiple
times has no effect. Calling onError(Throwable) multiple times relays the Throwable to
the RxJavaPlugins.onError(Throwable) global error handler.
This CompletableSubject supports the standard state-peeking methods hasComplete(),
hasThrowable(), getThrowable() and hasObservers().
- Scheduler:
CompletableSubjectdoes not operate by default on a particularSchedulerand theCompletableObservers get notified on the thread where the terminatingonErrororonCompletemethods were invoked.- Error handling:
- When the
onError(Throwable)is called, theCompletableSubjectenters into a terminal state and emits the sameThrowableinstance to the last set ofCompletableObservers. During this emission, if one or moreCompletableObservers dispose their respectiveDisposables, theThrowableis delivered to the global error handler viaRxJavaPlugins.onError(Throwable)(multiple times if multipleCompletableObservers cancel at once). If there were noCompletableObservers subscribed to thisCompletableSubjectwhen theonError()was called, the global error handler is not invoked.
Example usage:
CompletableSubject subject = CompletableSubject.create();
TestObserver<Void> to1 = subject.test();
// a fresh CompletableSubject is empty
to1.assertEmpty();
subject.onComplete();
// a CompletableSubject is always void of items
to1.assertResult();
TestObserver<Void> to2 = subject.test()
// late CompletableObservers receive the terminal event
to2.assertResult();
History: 2.0.5 - experimental
- Since:
- 2.1
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static final class -
Field Summary
FieldsModifier and TypeFieldDescription(package private) static final CompletableSubject.CompletableDisposable[](package private) Throwable(package private) final AtomicReference<CompletableSubject.CompletableDisposable[]> (package private) final AtomicBoolean(package private) static final CompletableSubject.CompletableDisposable[] -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) booleanstatic @NonNull CompletableSubjectcreate()Creates a fresh CompletableSubject.Returns the terminal error if this CompletableSubject has been terminated with an error, null otherwise.booleanReturns true if this CompletableSubject has been completed.booleanReturns true if this CompletableSubject has observers.booleanReturns true if this CompletableSubject has been terminated with an error.(package private) intReturns the number of current observers.voidCalled once the deferred computation completes normally.voidCalled once if the deferred computation 'throws' an exception.voidCalled once by theCompletableto set aDisposableon this instance which then can be used to cancel the subscription at any time.(package private) voidprotected voidsubscribeActual(CompletableObserver observer) Implement this method to handle the incomingCompletableObservers and perform the business logic in your operator.Methods inherited from class io.reactivex.rxjava3.core.Completable
amb, ambArray, ambWith, andThen, andThen, andThen, andThen, andThen, blockingAwait, blockingAwait, blockingSubscribe, blockingSubscribe, blockingSubscribe, blockingSubscribe, cache, complete, compose, concat, concat, concat, concatArray, concatArrayDelayError, concatDelayError, concatDelayError, concatDelayError, concatWith, create, defer, delay, delay, delay, delaySubscription, delaySubscription, doAfterTerminate, doFinally, doOnComplete, doOnDispose, doOnError, doOnEvent, doOnLifecycle, doOnSubscribe, doOnTerminate, error, error, fromAction, fromCallable, fromCompletionStage, fromFuture, fromMaybe, fromObservable, fromPublisher, fromRunnable, fromSingle, fromSupplier, hide, lift, materialize, merge, merge, merge, mergeArray, mergeArrayDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeWith, never, observeOn, onErrorComplete, onErrorComplete, onErrorResumeNext, onErrorResumeWith, onErrorReturn, onErrorReturnItem, onTerminateDetach, repeat, repeat, repeatUntil, repeatWhen, retry, retry, retry, retry, retry, retryUntil, retryWhen, safeSubscribe, sequenceEqual, startWith, startWith, startWith, startWith, startWith, subscribe, subscribe, subscribe, subscribe, subscribe, subscribeOn, subscribeWith, switchOnNext, switchOnNextDelayError, takeUntil, test, test, timeout, timeout, timeout, timeout, timer, timer, to, toCompletionStage, toFlowable, toFuture, toMaybe, toObservable, toSingle, toSingleDefault, unsafeCreate, unsubscribeOn, using, using, wrap
-
Field Details
-
observers
-
EMPTY
-
TERMINATED
-
once
-
error
Throwable error
-
-
Constructor Details
-
CompletableSubject
CompletableSubject()
-
-
Method Details
-
create
Creates a fresh CompletableSubject.- Returns:
- the new CompletableSubject instance
-
onSubscribe
Description copied from interface:CompletableObserverCalled once by theCompletableto set aDisposableon this instance which then can be used to cancel the subscription at any time.- Specified by:
onSubscribein interfaceCompletableObserver- Parameters:
d- theDisposableinstance to call dispose on for cancellation, not null
-
onError
Description copied from interface:CompletableObserverCalled once if the deferred computation 'throws' an exception.- Specified by:
onErrorin interfaceCompletableObserver- Parameters:
e- the exception, notnull.
-
onComplete
public void onComplete()Description copied from interface:CompletableObserverCalled once the deferred computation completes normally.- Specified by:
onCompletein interfaceCompletableObserver
-
subscribeActual
Description copied from class:CompletableImplement this method to handle the incomingCompletableObservers and perform the business logic in your operator.There is no need to call any of the plugin hooks on the current
Completableinstance or theCompletableObserver; all hooks and basic safeguards have been applied byCompletable.subscribe(CompletableObserver)before this method gets called.- Specified by:
subscribeActualin classCompletable- Parameters:
observer- theCompletableObserverinstance, nevernull
-
add
-
remove
-
getThrowable
Returns the terminal error if this CompletableSubject has been terminated with an error, null otherwise.- Returns:
- the terminal error or null if not terminated or not with an error
-
hasThrowable
public boolean hasThrowable()Returns true if this CompletableSubject has been terminated with an error.- Returns:
- true if this CompletableSubject has been terminated with an error
-
hasComplete
public boolean hasComplete()Returns true if this CompletableSubject has been completed.- Returns:
- true if this CompletableSubject has been completed
-
hasObservers
public boolean hasObservers()Returns true if this CompletableSubject has observers.- Returns:
- true if this CompletableSubject has observers
-
observerCount
int observerCount()Returns the number of current observers.- Returns:
- the number of current observers
-