ReactFX Consumer прослушивает более одного EventStream

Этот вопрос, возможно, предназначен для создателя ReactFX, но другие могут ответить.

В настоящее время я начинаю использовать ReactFX для обмена данными и обработки событий в приложении JavaFX. Мой вопрос заключается в том, как класс может подписаться на прослушивание событий от двух (или более) разных EventStreams, Предположим, что в Controller class у меня есть textfield который может быть обновлен с new text(String)так что этот класс будет реализовывать Consumer<String>, Но тогда вы можете также хотеть для этого textfield быть обновленным с new Integer (например) из совершенно другого источника, поэтому он должен был бы реализовать Consumer<Integer>, только вы не можете сделать это, потому что это уже реализует Consumer<String>,

Я думал о создании класса связки с полем id (с Enum например) и Object field содержащий данные, давайте назовем их ReactFXEventBundle, Только экземпляры этого класса смогут использоваться как Eventsгде потребитель может определить тип события, проанализировав поле id. Следовательно, все классы потребителей будут реализовывать Consumer<ReactFXEventBundle>, Будет ли это правильный подход?

1 ответ

Решение

Чтобы убедиться, что мы находимся на одной странице, я предполагаю, что ваша ситуация выглядит примерно так

class Controller {
    TextField getTextField();
}

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

и вы хотите направить оба strings а также integers в TextField's textProperty(), Вот как вы это делаете:

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

Словом, вы преобразуете поток целых чисел в поток строк, объединяете два потока строк и подаете объединенный поток в свойство text поля. (feedTo(property) это просто сокращение для subscribe(property::set)).

Обратите внимание, что ваш класс контроллера не должен реализовывать Consumer непосредственно. Экземпляр потребителя создается из property::set ссылка на метод.

Другие вопросы по тегам