我收到警告:这是否会导致可变参数堆的污染?
[选中]可能堆从参数可变参数的类型类污染
但我不确定是否将实际污染:
public void register(EventListener listener, Class<? extends Event>... eventTypes) {}
这里必要时完整实施:
public class EventDispatcher {
public static ConcurrentLinkedQueue<Event> eventQueue;
public static ConcurrentHashMap<Class<? extends Event>, CopyOnWriteArrayList<EventListener>> eventsListenerMap =
new ConcurrentHashMap<>();
public static void register(EventListener listener, Class<? extends Event>... eventTypes) {
for (Class<? extends Event> eventType : eventTypes) {
if (eventsListenerMap.containsKey(eventType)) {
eventsListenerMap.get(eventType).addIfAbsent(listener);
} else {
CopyOnWriteArrayList<EventListener> initializingListeners =
new CopyOnWriteArrayList<>();
initializingListeners.add(listener);
eventsListenerMap.put(eventType, initializingListeners);
}
}
}
}
为了改善这一点,我也为OT提出了一些建议,但请记住,这个课程还没有完成。
基于我的代码的例子明确了什么是陷阱。建议的预防措施可帮助我防止出现错误,并且该注释会清除IDE。所有与有用的链接。好,紧凑的答案,谢谢。 – zsawyer