我已经写了自定义的dispathing /处理事件的系统,一般是这样的:事件在Java中使用通用处理程序处理
事件处理接口:
public interface EventHandler{
}
基本事件类:
public abstract class Event<H extends EventHandler> {
public static Class Type<H> { }
public abstract void dispatch(H handler);
}
处理程序管理器:
public class HandlerManager {
private Map<Event.Type, List<EventHandler>> map = new HashMap<Event.Type, List<EventHandler>>();
public void register(Event.Type<H> type, H handler) {
if(map.get(type) == null) { map.put(type, new ArrayList<EventHandler>()); }
map.get(type).add(handler);
}
public void fire(Event<H> event) {...}
...
}
而且一切工作正常,但我想,当我注册处理DataChangeHandler与经理产生事件字符串和例如用于整数使用的事件,如
public class DataChangeEvent<D> extends Event<DataChangeHandler<D>> {
public static final Type<?> TYPE = new Type<?>();
D data;
...
public void dispatch(DataChangeHandler<D> handler) {
handler.onDataChanged(this);
}
public D getData() { return data; }
}
public class DataChangeHandler<D> extends EventHandler {
void onDataChanged(DataChangeEvent<D> event);
}
而现在,这个注册的处理程序将收到两个事件是什么原因发生ClassCastException时,我想要读取数据。 我明白泛型没有一些特殊的类,尽管在DataChangeHandler中定义了类型,但它们存储在处理程序映射中的同一个列表中。
有什么办法可以使它工作吗?
从HandleManager中H是从哪里来的? – 2010-08-25 18:56:09