Observable
从经典 Java 事件模式创建 Rx-Java 的最佳方法是什么?也就是说,给定
class FooEvent { ... }
interface FooListener {
void fooHappened(FooEvent arg);
}
class Bar {
public void addFooListener(FooListener l);
public void removeFooListener(FooListener l);
}
我要实施
Observable<FooEvent> fooEvents(Bar bar);
我想出的实现是:
Observable<FooEvent> fooEvents(Bar bar) {
return Observable.create(new OnSubscribeFunc<FooEvent>() {
public Subscription onSubscribe(Observer<? super FooEvent> obs) {
FooListener l = new FooListener() {
public void fooHappened(FooEvent arg) {
obs.onNext(arg);
}
};
bar.addFooListener(l);
return new Subscription() {
public void unsubscribe() {
bar.removeFooListener(l);
}
};
}
});
}
但是,我真的不喜欢它:
它非常冗长;
每个都需要一个监听
Observer
器(理想情况下,如果没有观察者,则应该没有监听器,否则应该有一个监听器)。这可以通过将观察者计数保持为 中的字段,OnSubscribeFunc
在订阅时增加它并在取消订阅时减少来改进。
有更好的解决方案吗?
要求:
使用现有的事件模式实现而不更改它们(如果我正在控制该代码,我已经可以编写它以返回
Observable
我需要的)。如果/当源 API 更改时出现编译器错误。不能使用
Object
实际事件参数类型或属性名称字符串来代替。