假设我有一些订阅者实现:
// SafeSubscriber extension doesn't matter here - the problem exists for simple Subscriber implementations too
class ParticularSubscriber<T> extends SafeSubscriber<T> {
private Subscriber<T> actual;
public ParticularSubscriber() {
super(Subscribers.create(System.out::println));
}
}
然后,我需要创建一个观察者,根据传递的订阅者执行一些额外的配置。天真的方法首先:
Observable<String> o = Observable.<String>create(subscriber -> {
if(subscriber instanceof ParticularSubscriber) {
// do some extra logic here.
}
});
如果我们直接订阅Observable o:
,它就能成功运作o.subscribe(new ParticularSubscriber<>());
但是如果我们对其应用一些操作,情况会发生变化:
o.map(str -> str + 1)
.filter(str -> str != "")
.subscribe(new ParticularSubscriber<>());
在后一种情况下,将一些包装器传递给OnSubscribe。在这个包装器的内部,有我最初的ParticularSubscriber,但是我没有能力去做它。
有没有办法在观察者的回调中访问最初传递的订阅者?