我已經寫了自定義的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