sto ottenendo l'avvertimento:Ciò causa inquinamento di heap con vararg?
[incontrollato] possibile inquinamento mucchio di tipo parametrico vararg Classe
Ma io sono sicuro se sarà effettivamente inquina:
public void register(EventListener listener, Class<? extends Event>... eventTypes) {}
Ecco l'implementazione completa se necessario:
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);
}
}
}
}
Sono pronto per i suggerimenti OT per migliorare anche questo, ma tieni presente che questa classe non è terminata.
L'esempio basato sul mio codice ha chiarito quali sono le insidie. Le precauzioni suggerite mi aiutano a prevenire gli errori e quell'annotazione pulisce l'IDE. Tutto ciò con link utili. Risposta grande, compatta, grazie. – zsawyer