带有 Java 数据的 TypeSafe EventDispatcher

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


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) {

        ...

    }


    ...

}

但这似乎并没有导致可以在事件调度程序中使用的事件对象......有什么想法吗?


白衣染霜花
浏览 71回答 1
1回答

幕布斯6054654

到目前为止,我最好的方法是:public class Events {&nbsp; &nbsp; private static <T> Event<T> create(String name) {&nbsp; &nbsp; &nbsp; &nbsp; return () -> name;&nbsp; &nbsp; }&nbsp; &nbsp; public static final Event<String> EVENT1 = create("Event1");&nbsp; &nbsp; public static final Event<String> EVENT2 = create("Event2");&nbsp; &nbsp; public static final Event<Long> EVENT3 = create("Event3");}比枚举更冗长,但在我写下所有事件后,它可以像枚举一样使用。但我仍然愿意接受更好的解决方案......
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java