Простой абстрактный строковый приемник - PullRequest
0 голосов
/ 04 мая 2018

У меня есть объекты, которые передают строки слушателям ...

Слушатели расширяют следующий класс:

public abstract class StringReceiver {

    public abstract void receive(String input);

}

Я не хочу изобретать велосипед. Мой вопрос: какой класс Java API следует использовать для такого рода отношений слушателя и получателя?

1 Ответ

0 голосов
/ 06 мая 2018

После долгих голосов и немного погуглил ,

Благодаря Ярославу Павляку я нашел ответ на свой вопрос.

Ответ состоял в том, чтобы полностью отказаться от класса, показанного в моем вопросе, и заменить его на:

Список потребителей:

List<Consumer<String>> inputReceivers = new ArrayList<Consumer<String>>();

Теперь добавим потребителей:

public void addReceiver(Consumer<String> receiver) {
    inputReceivers.add(receiver);
}

И срабатывает при событии:

    for (Consumer<String> a : inputReceivers) {
            a.accept("some string data");
    }

Вот и все! Нет необходимости реализовывать какой-либо интерфейс или расширять абстрактный класс, это хорошо работает с методами.

Я могу сделать что-то вроде этого:

addReceiver(s -> { 
                if (!StringUtils.isAllBlank(s)) {
                    // deal with string s
                }
            });

Почти волшебство!

...