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ā)射.