我尝试用数据实现一个简单的类型安全事件调度程序,即除了事件之外还可以传递任何数据。我发现了很多类型安全的事件调度程序问题或任何其他示例,但似乎没有人能解决我的问题。这是我到目前为止得到的: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
提交
取消