我很好奇应该使用哪种方法从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实现),您应该考虑使用CopyOnWriteArrayListCopyOnWriteArraySet编写自己的EventListenerList类,它们非常适合此任务。

10-01 16:13