ReactFX Consumer 监听多个 EventStream

ReactFX Consumer listening to more than one EventStream

这个问题可能是针对ReactFX的创建者的,但欢迎其他人回答。

我目前开始使用 ReactFXJavaFX 应用程序中进行数据共享和事件处理。我的问题是 class 如何订阅以监听来自两个(或更多)不同 EventStreams 的事件。假设在 Controller class 中我有一个 textfield 可以用 new text(String) 更新,所以这个 class 将实现 Consumer<String>。但是您可能还希望使用来自完全不同来源的 new Integer(例如)更新此 textfield,因此它必须实施 Consumer<Integer>,只有您可以'不要那样做,因为它已经实现了 Consumer<String>.

我想创建一个包 class,其中包含一个 id 字段(例如带有一个 Enum)和一个包含数据的 Object field,让我们将其命名为 ReactFXEventBundle .只有此 class 的实例才能用作 Events,其中消费者可以通过分析 id 字段来识别事件的类型。因此,所有 Consumer classes 都将实现 Consumer<ReactFXEventBundle>。这是正确的方法吗?

为确保我们在同一页面上,我假设你的情况看起来像这样

class Controller {
    TextField getTextField();
}

EventStream<String> strings;
EventStream<Integer> integers;

并且您想将 stringsintegers 路由到 TextField 的 textProperty()。这就是你的做法:

EventStreams.merge(
    strings,
    integers.map(Integer::toString)
).feedTo(controller.getTextField().textProperty());

换句话说,您将整数流转换为字符串流,合并两个字符串流,然后将合并后的流输入属性场地。 (feedTo(property) 只是 subscribe(property::set) 的 shorthand。

请注意,您的控制器 class 不必直接实施 Consumer。消费者实例是根据 property::set 方法引用创建的。