Java CustomObservable与Observable.create()?

Java CustomObservable与Observable.create()?,java,rx-java,Java,Rx Java,我正在将侦听器包装成可观察对象。通常我们使用Observable.create()来包装它,但是有些库更喜欢使用自定义的Observable,并在其中包装一些东西,比如RxBinding,甚至是RxJava本身(据我所知,操作符基本上是创建新的自定义Observable来在其中执行操作) 因此,我的问题是: 我们可以从Custom Observable中获得什么好处?它的开销比Observable.create()要低,因为我们不会生成另一个ObservableCreate来为我们覆盖Obser

我正在将侦听器包装成可观察对象。通常我们使用
Observable.create()
来包装它,但是有些库更喜欢使用自定义的Observable,并在其中包装一些东西,比如
RxBinding
,甚至是RxJava本身(据我所知,
操作符
基本上是创建新的自定义Observable来在其中执行操作)

因此,我的问题是: 我们可以从Custom Observable中获得什么好处?它的开销比
Observable.create()
要低,因为我们不会生成另一个
ObservableCreate
来为我们覆盖
ObservableSource


我应该使用哪一个将现有库包装成Rx样式(例如:Firebase)

只要有可能,我都会使用库提供的创建方法,如:
generate
fromCallable
create
。它们没有开销。它们处理各种内务管理问题,在编写自定义可观察对象时,您很容易忘记这些问题


不幸的是,在某些情况下,您无法使用它们,例如,当您需要特别安排时。在编写CustomObservable之前,我建议查看
generate
create
库方法的源代码。确保你理解其中的每一点,这样你就可以在你的可观察对象中做类似的事情。

在某些情况下,创建自定义可观察对象会带来额外的开销

在rxjava1.x中,扩展
Observable
和使用
Observable.create(OnSubscribe)
没有任何好处,因为它们实际上是相同的。但是,为中间操作员创建一个可观察的
比使用自定义
操作员的
lift()
有好处<代码>可观察。创建(发射器、背压调节)
增加了额外的保护措施,因为人们倾向于先发现
create
,然后实际重新实现
just()
range()
from()
,然后才意识到这是不必要的

在rxjava2.x中,默认的方法是扩展
Observable
和其他类型以添加源/中间运算符,这是最低的开销。受保护的创建方法仍然存在,但只需在理解协议方面进行少量投资,就可以通过让
观察者
一次性
也实现接口或扩展目标外部技术的基类,避免由于
create()
而分配额外对象

例如,我就是这样为Java Swing和RxJava 2编写适配器库的:

final class ActionEventObservable extends Observable<ActionEvent> {

    final AbstractButton widget;

    ActionEventObservable(AbstractButton widget) {
        this.widget = widget;
    }

    @Override 
    protected void subscribeActual(Observer<? super ActionEvent> observer) {
        AbstractButton w = widget;
        ActionEventConsumer aec = new ActionEventConsumer(observer, w);
        observer.onSubscribe(aec);
        w.addActionListener(aec);
        if (aec.get() == null) {
            w.removeActionListener(aec);
        }
    }

    static final class ActionEventConsumer
            extends AbstractEventConsumer<ActionEvent, AbstractButton>
            implements ActionListener {

        private static final long serialVersionUID = -3605206827474016488L;

        ActionEventConsumer(Observer<? super ActionEvent> actual, AbstractButton widget) {
            super(actual, widget);
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            actual.onNext(e);
        }

        @Override
        protected void onDispose(AbstractButton component) {
            component.removeActionListener(this);
        }
    }
}
最终类ActionEventObservable扩展了Observable{
最终抽象按钮小部件;
ActionEventObservable(AbstractButton小部件){
this.widget=widget;
}
@凌驾

受保护的无效订阅(ObserverRelated:@yaroslavstavnichy不完全正确。事实上,我想知道为什么像
RxBinding
这样的lib使用定制的Observable而不是
Observable。创建
库最大化代码重用,有其内部架构/理念。如果您编写一个包含许多包装接口的库,您可能会投入时间开发nd测试一些biolerplate基类,这可能比使用generic
create
更便于扩展。