1

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) {
4

1 に答える 1

1

すべてのリスナーが単一の既知のクラスである場合、2 番目の形式ははるかに単純で、エラーが発生しにくくなります。2 種類のリスナーがある場合は、2 番目の形式を 2 回使用します。

さまざまなクラスのリスナーがごちゃ混ぜになっている場合は、最初の形式を使用してください。これは、これまでに作成されたオブジェクト指向コードの中で最も醜く、粗野で、最もハックで、最も少ないものです。

ps IMO (確かにバイアスがかかっているため、EventListenerList の実装が本当に嫌いです)、CopyOnWriteArrayListまたはを使用して独自の EventListenerList クラスを作成することを検討する必要CopyOnWriteArraySetがあります。これらは、このタスクに最適です。

于 2013-03-05T16:39:40.180 に答える