下面介绍实现代码,整个链式调用真正开始的地方是.subscribe(),我们就从这里开始。省略掉一些代码,只看关键部分如下:
private static Subscription subscribe(Subscriber<? super T> subscriber, Observable observable) {
…
try {
// allow the hook to intercept and/or decorate
hook.onSubscribeStart(observable, observable.onSubscribe).call(subscriber); //代码①
return hook.onSubscribeReturn(subscriber);
}
…
}
hook.onSubscribeStart(observable, observable.onSubscribe)得到的对象就是observable.onSubscribe,而此处的observable明显就是this,也就是上例中的observable2对象,即把subscriber传入到了observable2里面以供其调用。
再跟着代码进入observable2(.map操作符)的实现。其主要实现是lift和OperatorMap。如下:
public final Observable map(Func1<? super T, ? extends R> func) {
return lift(new OperatorMap<T, R>(func));
}
lift和OperatorMap各自干了什么事情呢?先看OperatorMap,Func1也作为构造参数传入。关键代码:
@Override
public Subscriber<? super T> call(final Subscriber<? super R> o) { //代码②
return new Subscriber(o) {
@Override
public void onCompleted() {
o.onCompleted();
}
@Override
public void onError(Throwable e) {
o.onErr