私は警告を受けています:
[未チェック] パラメータ化された 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 の提案もお待ちしていますが、このクラスは未完成であることを覚えておいてください。