Swing – why does eventlistenerlist traverse backwards in firefooxxx()?

I don't understand the basic principle of this code, which is taken from javax swing. event. Eventlistenerlist document:

protected void fireFooXXX() {
    // Guaranteed to return a non-null array
    Object[] listeners = listenerList.getListenerList();
    // Process the listeners last to first,notifying
    // those that are interested in this event
    for (int i = listeners.length-2; i>=0; i-=2) {
        if (listeners[i]==FooListener.class) {
            // Lazily create the event:
            if (fooEvent == null)
                fooEvent = new FooEvent(this);                 
            ((FooListener)listeners[i+1]).fooXXX(fooEvent);
        }
    }
}

>Why does the list move backward? > Why is every listener called?

Event fired in javax swing. tree. Defaulttreemodel and so on are implemented in this way, so obviously I just don't get anything

Solution

>Possible performance considerations: backward iterations are faster because comparing with 0 is a single machine code instruction - many former C programmers have deep roots, although it is now quite irrelevant Please note that the order of notification of the audience cannot be guaranteed in any way. > Look at the rest of the class - it also stores the listener's type to provide type security

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>