我嘗試用數據實現一個簡單的類型安全事件調度程序,即除了事件之外還可以傳遞任何數據。我發現了很多類型安全的事件調度程序問題或任何其他示例,但似乎沒有人能解決我的問題。這是我到目前為止得到的:public interface EventDispatcher { <T> void registerCallback(Event<T> event, BiConsumer<T, Long> callback); <T> void event(Event<T> event, T t, long param);}和public interface Event<T> { String name();}這實際上有效(我有一個 EventDispatcher 接口的工作實現),可以通過使用 Enums 來“實現”事件接口,如下所示:public enum StringEvent implements Event<String> { EVENT1, EVENT2}我不滿意的是,我必須為所有要傳遞給調度程序的對象創建不同的枚舉。我在想這樣的事情public enum Events { EVENT1(String.class), EVENT2(String.class), EVENT3(Long.class); Events(Class<T> clazz) { ... } ...}但這似乎并沒有導致可以在事件調度程序中使用的事件對象......有什么想法嗎?
1 回答

幕布斯6054654
TA貢獻1876條經驗 獲得超7個贊
到目前為止,我最好的方法是:
public class Events {
private static <T> Event<T> create(String name) {
return () -> name;
}
public static final Event<String> EVENT1 = create("Event1");
public static final Event<String> EVENT2 = create("Event2");
public static final Event<Long> EVENT3 = create("Event3");
}
比枚舉更冗長,但在我寫下所有事件后,它可以像枚舉一樣使用。但我仍然愿意接受更好的解決方案......
添加回答
舉報
0/150
提交
取消