RxJava 操作符對應關系之Just

Just 操作符

當接受的參數為單個元素時:

observable.just("fdf");

被觀察者實例 :ObservableJust

subscribeActual 將傳入的觀察者與ObservableJust的內部類ScalarDisposable事件發(fā)射器關聯,

public static final class ScalarDisposable<T>

extends AtomicInteger

implements QueueDisposable<T>, Runnable

如上可見ScalarDisposable 本身實現了Runnable,事件發(fā)射自然就執(zhí)行在run方法中

@Override

public void run() {

? ? if (get() == START && compareAndSet(START, ON_NEXT)) {

? ? ? ? observer.onNext(value);

? ? ? ? if (get() == ON_NEXT) {

? ? ? ? ? ? lazySet(ON_COMPLETE);

? ? ? ? ? ? observer.onComplete();

? ? ? ? }

? ? }

}

當接受的參數為多個元素時:

首先會調用fromArray確認是否為多個元素

如果為一個元素時,則重復上面的上面的步驟

如果為多個元素時:

observable.just("fdf","xxx")

被觀察者實例 :ObservableFromArray

subscribeActual 將傳入的觀察者與 ObservableFromArray的內部類FromArrayDisposable事件發(fā)射器關聯

static final class FromArrayDisposable<T> extends BasicQueueDisposable<T>

可以看到FromArrayDisposable繼承自BasicQueueDisposable,所以他也是一個隊列

FromArrayDisposable中的run方法完成了多個元素的事件發(fā)射

void run() {

? ? T[] a = array;

? ? int n = a.length;

? ? for (int i = 0; i < n && !isDisposed(); i++) {

? ? ? ? T value = a[i];

? ? ? ? if (value == null) {

? ? ? ? ? ? actual.onError(new NullPointerException("The " + i + "th element is null"));

? ? ? ? ? ? return;

? ? ? ? }

? ? ? ? actual.onNext(value);

? ? }

? ? if (!isDisposed()) {

? ? ? ? actual.onComplete();

? ? }

}

如上源碼可見,在run方法中對just傳進來的元素進行遍歷,然后進行事件發(fā)射.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容