転載、リンクなどのソースを明記してください:
:この記事はから来て103styleさんのブログ
購読のフロアブル方法
public final Disposable subscribe() {
return subscribe(Functions.emptyConsumer(), Functions.ON_ERROR_MISSING,
Functions.EMPTY_ACTION, FlowableInternalHelper.RequestMax.INSTANCE);
}
public final Disposable subscribe(Consumer<? super T> onNext) {
return subscribe(onNext, Functions.ON_ERROR_MISSING,
Functions.EMPTY_ACTION, FlowableInternalHelper.RequestMax.INSTANCE);
}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {
return subscribe(onNext, onError, Functions.EMPTY_ACTION,
FlowableInternalHelper.RequestMax.INSTANCE);
}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError,
Action onComplete) {
return subscribe(onNext, onError, onComplete,
FlowableInternalHelper.RequestMax.INSTANCE);
}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError,
Action onComplete, Consumer<? super Subscription> onSubscribe) {
LambdaSubscriber<T> ls = new LambdaSubscriber<T>(onNext, onError, onComplete, onSubscribe);
subscribe(ls);
return ls;
}
public final void subscribe(Subscriber<? super T> s) {
if (s instanceof FlowableSubscriber) {
subscribe((FlowableSubscriber<? super T>)s);
} else {
ObjectHelper.requireNonNull(s, "s is null");
subscribe(new StrictSubscriber<T>(s));
}
}
public final void subscribe(FlowableSubscriber<? super T> s) {
ObjectHelper.requireNonNull(s, "s is null");
try {
Subscriber<? super T> z = RxJavaPlugins.onSubscribe(this, s);
subscribeActual(z);
} catch (...) {
...
}
}
protected abstract void subscribeActual(Subscriber<? super T> s);
最初の4つの方法がデフォルトで呼び出されます。
-
Functions.emptyConsumer()
:static final class EmptyConsumer implements Consumer<Object> { @Override public void accept(Object v) { } @Override public String toString() { return "EmptyConsumer"; } }
-
Functions.ON_ERROR_MISSING
:static final class OnErrorMissingConsumer implements Consumer<Throwable> { @Override public void accept(Throwable error) { RxJavaPlugins.onError(new OnErrorNotImplementedException(error)); } }
-
Functions.EMPTY_ACTION
:static final class EmptyAction implements Action { @Override public void run() { } @Override public String toString() { return "EmptyAction"; } }
-
FlowableInternalHelper.RequestMax.INSTANCE
:public enum RequestMax implements Consumer<Subscription> { INSTANCE; @Override public void accept(Subscription t) throws Exception { t.request(Long.MAX_VALUE); } }
呼び出してsubscribe(onNext, onError, onComplete, onSubscribe)
、その後、4つのパラメータにパッケージ化LambdaSubscriber
より優先され、子クラスのオブジェクトsubscribeActual
メソッドを。
そしてsubscribe(Subscriber<? super T> s)
、自身の送信することによって達成されるFlowableSubscriber
インターフェースまたは転送Subscriber
するように構成されたStrictSubscriber
オーバーライドサブクラス転送subscribeActual
方法を。
そしてために、次のプロセスの分析Rxjavaのソースオペレータを作成するには、同様に記述しました。
上記。
ます。https://www.jianshu.com/p/0aa24c3ccb4fで再現