Tôi nhận được cảnh báo:Điều này có gây ra ô nhiễm heap với varargs?
[kiểm soát] có thể ô nhiễm đống từ tham số vararg loại Lớp
Nhưng tôi không chắc chắn nếu nó thực sự sẽ gây ô nhiễm:
public void register(EventListener listener, Class<? extends Event>... eventTypes) {}
Đây là việc triển khai đầy đủ nếu cần thiết:
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);
}
}
}
}
Tôi đồng ý với các đề xuất OT để cải thiện điều này, nhưng hãy nhớ rằng lớp học này chưa hoàn thành.
Ví dụ dựa trên mã của tôi đã nêu rõ những cạm bẫy là gì. Các biện pháp phòng ngừa được đề xuất giúp tôi ngăn chặn những sai lầm và chú thích đó làm sạch IDE. Tất cả điều đó với các liên kết hữu ích. Câu trả lời tuyệt vời, nhỏ gọn, cảm ơn. – zsawyer