我收到警告:
[未选中] 参数化 vararg 类型类可能造成的堆污染
但我不确定它是否真的会污染:
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 建议来改进这一点,但请记住,这门课还没有完成。