gpt4 book ai didi

java - 是否有可能避免这种未经检查的 Actor 阵容?

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

我正在为参数化事件编写一个简单的事件系统,它使用从类到以该类作为参数的处理程序集的Map。我的理解是I can't define that relationship between key and value types via parameter restrictions我收到了未经检查的强制转换警告,将元素从集合中拉出。

这是我目前拥有的:

public class Manager {
private class Event<T> {
// getSubject(), etc.
}

private interface Handler<T> {
public T handleEvent(Event<T> event, T subject);
}

private final Map<Class<?>, Set<Handler<?>>> handlers = new HashMap<Class<?>, Set<Handler<?>>>();

public <T> void post(final Event<T> event, final T subject) {
final Class<?> type = subject.getClass();

if (this.handlers.containsKey(type)) {
for (Handler<?> handler : this.handlers.get(type)) {
// unchecked cast
((Handler<T>) handler).handleEvent(event, subject);
}
}
}

public <T> void register(final Class<T> type, final Handler<T> handler) {
if (!this.handlers.containsKey(type)) {
this.handlers.put(type, new HashSet<Handler<?>>());
}

this.handlers.get(type).add(handler);
}
}

是否可以避免这种未经检查的强制转换?我的设计可能存在缺陷吗?

我在这里和 Google 上花了相当长的时间,但无法找到任何完全涵盖这种安排的内容。

最佳答案

如果事件类本身形成层次结构,您可以使用访问者模式来避免强制转换。这在 Java 中非常麻烦,但不需要强制转换。

关于java - 是否有可能避免这种未经检查的 Actor 阵容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19278499/

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