Диспетчеризация собственных событий. Как объект сообщает о своем состоянии родителю в java? Вопрос #1: Каким образом в java объект может сообщить об изменении какой либо переменной своему родителю?
Я так понимаю, что для этого используются диспетчеризация событий? Только так, или есть еще какие то варианты?
Почему спрашиваю, потому что на счет кастомных событий ничего толком не нашел, и думаю может в java все иначе, чем в AS3. Очень странно, что на эту тему информации почти нету.
Нашел следующий вариант, как диспатчить в java://определяем функциональный интерфейс:
package sample;
public interface EventListener {
void dispatch(String s);
}
в родительском классе:// прописываем лямбда выражение
EventListener listener = e -> {
if (e.equals(snake.CHANGE_IS_LIVE)) // будем проверять типы событий
System.out.println("new event: " + e); // логика ...
};
snake.setListener(listener); // устанавливаем слушатель на дочерний объект
дочерний объект:// на пока просто константы, можно сделать перечисление ENUM (типы событий)
String CHANGE_IS_LIVE = "[change is live]";
String CHANGE_IS_MOVE = "[change is move]";
private EventListener listener; // ссылка на обработчик
public void setListener(EventListener l) {
this.listener = l;
}
public void dispatch() {
listener.dispatch(CHANGE_IS_LIVE); // собственно создаем событие <-
}
В принципе работает, но выглядит не очень. Второй #2 Правильно ли использовать данную реализацию? Или же есть варианты по проще, и более правильные? И как поступали раньше до появления лямбда выражений (до java8)?Вопрос #3 Почему так мало информации на этот счет, неужели данная задача не актуальна?

21 Авг 2019 в 06:59
175 +1
0
Ответы
1

Да, для сообщения о изменении состояния объекта родителю в Java действительно часто используется диспетчеризация событий. Этот подход позволяет объектам взаимодействовать между собой без явного обращения к родительским объектам.

Приведенная вами реализация использования функционального интерфейса и лямбда-выражений для диспетчеризации событий допустима в Java. Однако есть и другие варианты реализации данной задачи. Например, можно использовать интерфейс Listener и его реализации для обработки событий, а также использовать существующие библиотеки для упрощения работы с событиями, такие как EventBus из Guava.

В Java до появления лямбда-выражений (до Java 8) для реализации диспетчеризации событий обычно использовали интерфейсы Listener и реализации этих интерфейсов. Кроме того, можно было создавать собственные классы для определения и обработки событий.

Информации на эту тему может быть меньше, чем на другие темы, потому что диспетчеризация событий - это специфический способ организации взаимодействия объектов, который не всегда прямо относится к основным принципам программирования на Java. Однако, это важный инструмент при разработке приложений с графическим интерфейсом, играми и другими программами, где важно уведомление об изменении состояния объектов.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир