otrzymuję ostrzeżenie:Czy to powoduje zanieczyszczenie sterty przy użyciu varargs?
[niezaznaczone] Możliwe zanieczyszczenie sterty od typu parametryzowane vararg klasy
ale jestem pewien, czy będzie to rzeczywiście zanieczyszczają:
public void register(EventListener listener, Class<? extends Event>... eventTypes) {}
Oto pełne wdrożenie, jeśli jest to konieczne:
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);
}
}
}
}
Jestem gotów na sugestie OT, aby to poprawić, ale pamiętajcie, że ta klasa jest niedokończona.
Przykład oparty na moim kodzie wyraźnie pokazuje, jakie są pułapki. Sugerowane środki ostrożności pomagają mi zapobiegać błędom i że adnotacja oczyszcza IDE. Wszystko to z przydatnymi linkami. Świetna, zwarta odpowiedź, dzięki. – zsawyer