package org.dayatang.dddlib.event.api;
import java.lang.reflect.ParameterizedType;
/**
* 抽象事件处理器
* @param <T> 事件类型
*/
public abstract class AbstractEventListener<T extends Event> implements EventListener<T> {
@Override
public void onEvent(T event) {
if (!supports(event)) {
return;
}
handle((T) event);
}
//判断是否监听指定的事件类型
private boolean supports(Event event) {
ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();
Class<?> eventClass = (Class<?>) parameterizedType.getActualTypeArguments()[0];
//System.out.println("Event class is: " + eventClass);
return eventClass.isAssignableFrom(event.getClass());
}
/**
* 处理事件
* @param event 要处理的事件
*/
public abstract void handle(T event);
}