我很好奇应该使用哪种方法从EventListenerList检索侦听器列表。 Oracle文档示例显示了getListenerList,然后在fireXXXEvent方法中向后遍历,但是我想知道getListeners是否是更好的选择?
listeners = listenerList.getListenerList();
for (int i = listeners.length - 2; i >= 0; i -= 2)
要么
listeners = listenerList.getListeners(ListenerClass.class);
for (ListenerClass listener : listeners) {
最佳答案
如果您的所有侦听器都属于一个已知类,则第二种形式会更简单并且更不会出错。如果您可能有两种类型的侦听器,请使用第二种形式两次。
如果您对不同类的侦听器杂乱无章,请使用第一种形式,IMO是有史以来编写的最丑陋,最粗俗,最hacky,最少面向对象的代码。
ps。 IMO(有偏见,因为我真的不喜欢EventListenerList实现),您应该考虑使用CopyOnWriteArrayList
或CopyOnWriteArraySet
编写自己的EventListenerList类,它们非常适合此任务。