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); }