gpt4 book ai didi

java - 带有 Java 数据的 TypeSafe EventDispatcher

转载 作者:行者123 更新时间:2023-11-30 12:04:47 24 4
gpt4 key购买 nike

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

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 接口(interface)的有效实现),可以使用像这样的枚举来“实现”事件接口(interface):

public enum StringEvent implements Event<String> {
EVENT1,
EVENT2
}

我不满意的是,我必须为所有要传递给调度程序的对象创建不同的枚举。我在想这样的事情

public enum Events {
EVENT1(String.class),
EVENT2(String.class),
EVENT3(Long.class);

Events(Class<T> clazz) {
...
}

...
}

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

最佳答案

到目前为止我最好的方法是:

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");
}

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

关于java - 带有 Java 数据的 TypeSafe EventDispatcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56893853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com