EventEmitter
Контракт для объектов, способных регистрировать слушателей и рассылать типизированные события.
Обзор
EventEmitter — базовый контракт подписки и диспетчеризации событий, реализуемый интерфейсом Widget и другими наблюдаемыми компонентами UniGUI. Он предоставляет строго типизированный интерфейс без применения рефлексии для регистрации слушателей и синхронной рассылки событий.
Каждое событие идентифицируется токеном EventType<T>, исключая строковые идентификаторы и рефлексию.
Управление подписками
Вызов on(EventType, listener) регистрирует слушателя и возвращает дескриптор EventSubscription:
- Отписка: Вызовите
subscription.unsubscribe()илиsubscription.close(), чтобы прекратить получение событий. - Управление жизненным циклом: Благодаря реализации
AutoCloseable, дескриптор отлично сочетается сtry-with-resourcesилиEventScopeдля автоматической отписки при закрытии экрана или виджета. - Потокобезопасность: Реализация гарантирует, что регистрация и удаление слушателей во время активной рассылки не приводят к ошибкам модификации коллекций.
Отмена событий
События в UniGUI поддерживают кооперативную отмену через Event.cancel() и Event.isCancelled().
- Стандартный слушатель:
on(type, listener)автоматически игнорирует события, которые уже были отменены. - Слушатель аудита / мониторинга: Используйте перегрузку
on(type, true, listener)с параметромreceiveCancelled = true, чтобы получать события даже после вызоваcancel(). Это полезно для телеметрии, логов и глобальных перехватчиков.
Подписка на события
EventSubscription sub = widget.on(ButtonClickEvent.TYPE, e -> {
System.out.println("Кнопка нажата!");
});
// Позже — отписка:
sub.unsubscribe();
Диспетчеризация событий
// Синхронно рассылает событие всем подходящим слушателям
widget.emit(new ButtonClickEvent(widget));
Связанные ссылки
API
EventEmitter::on(EventType, EventListener)
Подписаться на событие
Регистрирует слушателя для указанного типа события.
| Параметр | Тип | Описание |
|---|---|---|
type |
EventType |
Токен типа события |
listener |
EventListener |
Callback, принимающий экземпляры событий |
Возвращает EventSubscription: Дескриптор EventSubscription для отписки.
EventEmitter::on(EventType, boolean, EventListener)
Подписаться с приёмом отменённых событий
Регистрирует слушателя с явным контролем приёма отменённых событий.
| Параметр | Тип | Описание |
|---|---|---|
type |
EventType |
Токен типа события |
receiveCancelled |
boolean |
True для получения отменённых событий |
listener |
EventListener |
Callback, принимающий экземпляры событий |
Возвращает EventSubscription: Дескриптор EventSubscription для отписки.
EventEmitter::emit(Event)
Вызвать событие
Синхронно рассылает событие всем зарегистрированным слушателям.
| Параметр | Тип | Описание |
|---|---|---|
event |
Event |
Экземпляр события для рассылки |