<small id='06ROC'></small><noframes id='06ROC'>

          <bdo id='06ROC'></bdo><ul id='06ROC'></ul>
      1. <legend id='06ROC'><style id='06ROC'><dir id='06ROC'><q id='06ROC'></q></dir></style></legend>
        <i id='06ROC'><tr id='06ROC'><dt id='06ROC'><q id='06ROC'><span id='06ROC'><b id='06ROC'><form id='06ROC'><ins id='06ROC'></ins><ul id='06ROC'></ul><sub id='06ROC'></sub></form><legend id='06ROC'></legend><bdo id='06ROC'><pre id='06ROC'><center id='06ROC'></center></pre></bdo></b><th id='06ROC'></th></span></q></dt></tr></i><div id='06ROC'><tfoot id='06ROC'></tfoot><dl id='06ROC'><fieldset id='06ROC'></fieldset></dl></div>

      2. <tfoot id='06ROC'></tfoot>

        从普通 Java 事件创建 Observable

        时间:2023-09-30
      3. <tfoot id='y0Az2'></tfoot>

            <bdo id='y0Az2'></bdo><ul id='y0Az2'></ul>
                <tbody id='y0Az2'></tbody>

              <small id='y0Az2'></small><noframes id='y0Az2'>

                  <i id='y0Az2'><tr id='y0Az2'><dt id='y0Az2'><q id='y0Az2'><span id='y0Az2'><b id='y0Az2'><form id='y0Az2'><ins id='y0Az2'></ins><ul id='y0Az2'></ul><sub id='y0Az2'></sub></form><legend id='y0Az2'></legend><bdo id='y0Az2'><pre id='y0Az2'><center id='y0Az2'></center></pre></bdo></b><th id='y0Az2'></th></span></q></dt></tr></i><div id='y0Az2'><tfoot id='y0Az2'></tfoot><dl id='y0Az2'><fieldset id='y0Az2'></fieldset></dl></div>
                  <legend id='y0Az2'><style id='y0Az2'><dir id='y0Az2'><q id='y0Az2'></q></dir></style></legend>
                  本文介绍了从普通 Java 事件创建 Observable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  从经典 Java 事件模式创建 Rx-Java Observable 的最佳方法是什么?也就是说,给定

                  What is the best way to create an Rx-Java Observable from the classical Java event pattern? That is, given

                  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);
                          }
                        };
                      }
                    }); 
                  }
                  

                  不过,我不是很喜欢:

                  1. 很冗长;

                  1. it's quite verbose;

                  每个 Observer 都需要一个监听器(理想情况下,如果没有观察者,则应该没有监听器,否则只有一个监听器).这可以通过将观察者计数保留为 OnSubscribeFunc 中的一个字段,在订阅时递增,在取消订阅时递减.

                  requires a listener per Observer (ideally there should be no listeners if there are no observers, and one listener otherwise). This can be improved by keeping an observer count as a field in the OnSubscribeFunc, incrementing it on subscribe and decrementing on unsubscribe.

                  有没有更好的解决方案?

                  Is there a better solution?

                  要求:

                  1. 使用现有的事件模式实现而不更改它们(如果我正在控制该代码,我已经可以编写它以返回我需要的 Observable).

                  如果/当源 API 更改时会出现编译器错误.不能使用 Object 而不是实际的事件参数类型或属性名称字符串.

                  Getting compiler errors if/when the source API changes. No working with Object instead of actual event argument type or with property name strings.

                  推荐答案

                  我认为没有办法为每个可能的事件创建一个通用的 observable,但你当然可以在任何需要的地方使用它们.

                  I don't think there's a way to create a generic observable for every possible event, but you can certainly use them wherever you need.

                  RxJava 源代码有一些方便的示例,说明如何从鼠标事件、按钮事件等创建可观察对象.看看这个类,它从 KeyEvents 创建它们:KeyEventSource.java.

                  The RxJava source has some handy examples of how to create observables from mouse events, button events, etc. Take a look at this class, which creates them from KeyEvents: KeyEventSource.java.

                  这篇关于从普通 Java 事件创建 Observable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:getSource() 和 getActionCommand() 下一篇:如何在 DDD 中管理域逻辑和事件之间的事务?

                  相关文章

                  最新文章

                  <legend id='kM5VE'><style id='kM5VE'><dir id='kM5VE'><q id='kM5VE'></q></dir></style></legend>

                  <small id='kM5VE'></small><noframes id='kM5VE'>

                  <i id='kM5VE'><tr id='kM5VE'><dt id='kM5VE'><q id='kM5VE'><span id='kM5VE'><b id='kM5VE'><form id='kM5VE'><ins id='kM5VE'></ins><ul id='kM5VE'></ul><sub id='kM5VE'></sub></form><legend id='kM5VE'></legend><bdo id='kM5VE'><pre id='kM5VE'><center id='kM5VE'></center></pre></bdo></b><th id='kM5VE'></th></span></q></dt></tr></i><div id='kM5VE'><tfoot id='kM5VE'></tfoot><dl id='kM5VE'><fieldset id='kM5VE'></fieldset></dl></div>
                  • <bdo id='kM5VE'></bdo><ul id='kM5VE'></ul>

                    <tfoot id='kM5VE'></tfoot>