为了账号安全,请及时绑定邮箱和手机立即绑定

带有 Java 数据的 TypeSafe EventDispatcher

带有 Java 数据的 TypeSafe EventDispatcher

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

}

比枚举更冗长,但在我写下所有事件后,它可以像枚举一样使用。但我仍然愿意接受更好的解决方案......


查看完整回答
反对 回复 2023-03-09
  • 1 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信