RxJava 操作符对应关系之Just

2019-05-21  本文已影响0人  追风之猪

Just 操作符

当接受的参数为单个元素时:

observable.just("fdf");

被观察者实例 :ObservableJust

subscribeActual 将传入的观察者与ObservableJust的内部类ScalarDisposable事件发射器关联,

public static final class ScalarDisposable<T>

extends AtomicInteger

implements QueueDisposable<T>, Runnable

如上可见ScalarDisposable 本身实现了Runnable,事件发射自然就执行在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事件发射器关联

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

可以看到FromArrayDisposable继承自BasicQueueDisposable,所以他也是一个队列

FromArrayDisposable中的run方法完成了多个元素的事件发射

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传进来的元素进行遍历,然后进行事件发射.

上一篇下一篇

猜你喜欢

热点阅读