Class MaybeSubject<T>
- Type Parameters:
T
- the value type received and emitted
- All Implemented Interfaces:
MaybeObserver<T>
,MaybeSource<T>
This subject does not have a public constructor by design; a new non-terminated instance of this
MaybeSubject
can be created via the create()
method.
Since the MaybeSubject
is conceptionally derived from the Processor
type in the Reactive Streams specification,
null
s are not allowed (Rule 2.13)
as parameters to onSuccess(Object)
and onError(Throwable)
. Such calls will result in a
NullPointerException
being thrown and the subject's state is not changed.
Since a MaybeSubject
is a Maybe
, calling onSuccess
, onError
or onComplete
will move this MaybeSubject
into its terminal state atomically.
All methods are thread safe. Calling onSuccess(Object)
or onComplete()
multiple
times has no effect. Calling onError(Throwable)
multiple times relays the Throwable
to
the RxJavaPlugins.onError(Throwable)
global error handler.
Even though MaybeSubject
implements the MaybeObserver
interface, calling
onSubscribe
is not required (Rule 2.12)
if the subject is used as a standalone source. However, calling onSubscribe
after the MaybeSubject
reached its terminal state will result in the
given Disposable
being disposed immediately.
This MaybeSubject
supports the standard state-peeking methods hasComplete()
, hasThrowable()
,
getThrowable()
and hasObservers()
as well as means to read any success item in a non-blocking
and thread-safe manner via hasValue()
and getValue()
.
The MaybeSubject
does not support clearing its cached onSuccess
value.
- Scheduler:
MaybeSubject
does not operate by default on a particularScheduler
and theMaybeObserver
s get notified on the thread where the terminatingonSuccess
,onError
oronComplete
methods were invoked.- Error handling:
- When the
onError(Throwable)
is called, theMaybeSubject
enters into a terminal state and emits the sameThrowable
instance to the last set ofMaybeObserver
s. During this emission, if one or moreMaybeObserver
s dispose their respectiveDisposable
s, theThrowable
is delivered to the global error handler viaRxJavaPlugins.onError(Throwable)
(multiple times if multipleMaybeObserver
s cancel at once). If there were noMaybeObserver
s subscribed to thisMaybeSubject
when theonError()
was called, the global error handler is not invoked.
Example usage:
MaybeSubject<Integer> subject1 = MaybeSubject.create();
TestObserver<Integer> to1 = subject1.test();
// MaybeSubjects are empty by default
to1.assertEmpty();
subject1.onSuccess(1);
// onSuccess is a terminal event with MaybeSubjects
// TestObserver converts onSuccess into onNext + onComplete
to1.assertResult(1);
TestObserver<Integer> to2 = subject1.test();
// late Observers receive the terminal signal (onSuccess) too
to2.assertResult(1);
// -----------------------------------------------------
MaybeSubject<Integer> subject2 = MaybeSubject.create();
TestObserver<Integer> to3 = subject2.test();
subject2.onComplete();
// a completed MaybeSubject completes its MaybeObservers
to3.assertResult();
TestObserver<Integer> to4 = subject1.test();
// late Observers receive the terminal signal (onComplete) too
to4.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 MaybeSubject.MaybeDisposable[]
(package private) Throwable
(package private) final AtomicReference
<MaybeSubject.MaybeDisposable<T>[]> (package private) final AtomicBoolean
(package private) static final MaybeSubject.MaybeDisposable[]
(package private) T
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) boolean
add
(MaybeSubject.MaybeDisposable<T> inner) static <T> @NonNull MaybeSubject
<T> create()
Creates a fresh MaybeSubject.Returns the terminal error if this MaybeSubject has been terminated with an error, null otherwise.getValue()
Returns the success value if this MaybeSubject was terminated with a success value.boolean
Returns true if this MaybeSubject has been completed.boolean
Returns true if this MaybeSubject has observers.boolean
Returns true if this MaybeSubject has been terminated with an error.boolean
hasValue()
Returns true if this MaybeSubject was terminated with a success value.(package private) int
Returns the number of current observers.void
Called once the deferred computation completes normally.void
Notifies theMaybeObserver
that theMaybe
has experienced an error condition.void
Provides theMaybeObserver
with the means of cancelling (disposing) the connection (channel) with theMaybe
in both synchronous (from withinonSubscribe(Disposable)
itself) and asynchronous manner.void
Notifies theMaybeObserver
with one item and that theMaybe
has finished sending push-based notifications.(package private) void
remove
(MaybeSubject.MaybeDisposable<T> inner) protected void
subscribeActual
(MaybeObserver<? super T> observer) Implement this method in subclasses to handle the incomingMaybeObserver
s.Methods inherited from class io.reactivex.rxjava3.core.Maybe
amb, ambArray, ambWith, blockingGet, blockingGet, blockingSubscribe, blockingSubscribe, blockingSubscribe, blockingSubscribe, blockingSubscribe, cache, cast, compose, concat, concat, concat, concat, concat, concat, concatArray, concatArrayDelayError, concatArrayEager, concatArrayEagerDelayError, concatDelayError, concatDelayError, concatDelayError, concatEager, concatEager, concatEager, concatEager, concatEagerDelayError, concatEagerDelayError, concatEagerDelayError, concatEagerDelayError, concatMap, concatMapCompletable, concatMapSingle, concatWith, contains, count, create, defaultIfEmpty, defer, delay, delay, delay, delay, delay, delaySubscription, delaySubscription, delaySubscription, dematerialize, doAfterSuccess, doAfterTerminate, doFinally, doOnComplete, doOnDispose, doOnError, doOnEvent, doOnLifecycle, doOnSubscribe, doOnSuccess, doOnTerminate, empty, error, error, filter, flatMap, flatMap, flatMap, flatMapCompletable, flatMapObservable, flatMapPublisher, flatMapSingle, flattenAsFlowable, flattenAsObservable, flattenStreamAsFlowable, flattenStreamAsObservable, fromAction, fromCallable, fromCompletable, fromCompletionStage, fromFuture, fromFuture, fromObservable, fromOptional, fromPublisher, fromRunnable, fromSingle, fromSupplier, hide, ignoreElement, isEmpty, just, lift, map, mapOptional, materialize, merge, merge, merge, merge, merge, merge, merge, mergeArray, mergeArrayDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeWith, never, observeOn, ofType, onErrorComplete, onErrorComplete, onErrorResumeNext, onErrorResumeWith, onErrorReturn, onErrorReturnItem, onTerminateDetach, repeat, repeat, repeatUntil, repeatWhen, retry, retry, retry, retry, retry, retryUntil, retryWhen, safeSubscribe, sequenceEqual, sequenceEqual, startWith, startWith, startWith, startWith, startWith, subscribe, subscribe, subscribe, subscribe, subscribe, subscribe, subscribeOn, subscribeWith, switchIfEmpty, switchIfEmpty, switchOnNext, switchOnNextDelayError, takeUntil, takeUntil, test, test, timeInterval, timeInterval, timeInterval, timeInterval, timeout, timeout, timeout, timeout, timeout, timeout, timeout, timeout, timer, timer, timestamp, timestamp, timestamp, timestamp, to, toCompletionStage, toCompletionStage, toFlowable, toFuture, toObservable, toSingle, unsafeCreate, unsubscribeOn, using, using, wrap, zip, zip, zip, zip, zip, zip, zip, zip, zip, zipArray, zipWith
-
Field Details
-
Constructor Details
-
MaybeSubject
MaybeSubject()
-
-
Method Details
-
create
Creates a fresh MaybeSubject.- Type Parameters:
T
- the value type received and emitted- Returns:
- the new MaybeSubject instance
-
onSubscribe
Description copied from interface:MaybeObserver
Provides theMaybeObserver
with the means of cancelling (disposing) the connection (channel) with theMaybe
in both synchronous (from withinonSubscribe(Disposable)
itself) and asynchronous manner.- Specified by:
onSubscribe
in interfaceMaybeObserver<T>
- Parameters:
d
- theDisposable
instance whoseDisposable.dispose()
can be called anytime to cancel the connection
-
onSuccess
Description copied from interface:MaybeObserver
Notifies theMaybeObserver
with one item and that theMaybe
has finished sending push-based notifications.The
Maybe
will not call this method if it callsMaybeObserver.onError(java.lang.Throwable)
.- Specified by:
onSuccess
in interfaceMaybeObserver<T>
- Parameters:
value
- the item emitted by theMaybe
-
onError
Description copied from interface:MaybeObserver
Notifies theMaybeObserver
that theMaybe
has experienced an error condition.If the
Maybe
calls this method, it will not thereafter callMaybeObserver.onSuccess(T)
.- Specified by:
onError
in interfaceMaybeObserver<T>
- Parameters:
e
- the exception encountered by theMaybe
-
onComplete
public void onComplete()Description copied from interface:MaybeObserver
Called once the deferred computation completes normally.- Specified by:
onComplete
in interfaceMaybeObserver<T>
-
subscribeActual
Description copied from class:Maybe
Implement this method in subclasses to handle the incomingMaybeObserver
s.There is no need to call any of the plugin hooks on the current
Maybe
instance or theMaybeObserver
; all hooks and basic safeguards have been applied byMaybe.subscribe(MaybeObserver)
before this method gets called.- Specified by:
subscribeActual
in classMaybe<T>
- Parameters:
observer
- theMaybeObserver
to handle, notnull
-
add
-
remove
-
getValue
Returns the success value if this MaybeSubject was terminated with a success value.- Returns:
- the success value or null
-
hasValue
public boolean hasValue()Returns true if this MaybeSubject was terminated with a success value.- Returns:
- true if this MaybeSubject was terminated with a success value
-
getThrowable
Returns the terminal error if this MaybeSubject 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 MaybeSubject has been terminated with an error.- Returns:
- true if this MaybeSubject has been terminated with an error
-
hasComplete
public boolean hasComplete()Returns true if this MaybeSubject has been completed.- Returns:
- true if this MaybeSubject has been completed
-
hasObservers
public boolean hasObservers()Returns true if this MaybeSubject has observers.- Returns:
- true if this MaybeSubject has observers
-
observerCount
int observerCount()Returns the number of current observers.- Returns:
- the number of current observers
-