Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-7020922

java.awt.Toolkit.getPropertyChangeListeners() should mention that it returns proxies

XMLWordPrintable

    • b142
    • generic
    • generic
    • Verified

      Platform: All
      JDK: 1.4+
      class: java.awt.Toolkit
      method: http://download.java.net/jdk7/docs/api/java/awt/Toolkit.html#getPropertyChangeListeners()

          --------------------------------------------------------------------------------
          public PropertyChangeListener[] getPropertyChangeListeners()
          Returns an array of all the property change listeners registered on this toolkit.
          Returns:
                all of this toolkit's PropertyChangeListeners or an empty array
                if no property change listeners are currently registered
          --------------------------------------------------------------------------------

       Assertion above is not correct.
       In fact method returns proxies, not listeners.

       Please see the following code sample for illustration:

      ----------------------------------------------------------------------------------------------
      import java.awt.*;
      import java.beans.PropertyChangeEvent;
      import java.beans.PropertyChangeListener;
      import java.util.Arrays;

      public class Test {
          public static void main(String[] args) {

              // this is for shortness, this behavior exist in default methods of Toolkit class
              // so any stubbed Toolkit child could be used as well
              Toolkit toolkit = Toolkit.getDefaultToolkit();

              toolkit.addPropertyChangeListener("prop", new PropertyChangeListener() {
                  @Override public void propertyChange(PropertyChangeEvent evt) { }
                  @Override public String toString() { return "my pcl"; }
              });

              PropertyChangeListener[] byProp = toolkit.getPropertyChangeListeners("prop");
              PropertyChangeListener[] all = toolkit.getPropertyChangeListeners();

              System.out.println("getPropertyChangeListeners(\"prop\") = " + Arrays.toString(byProp));
              System.out.println("getPropertyChangeListeners() = " + Arrays.toString(all));
          }
      }
      ----------------------------------------------------------------------------------------------

      The output will look like

      getPropertyChangeListeners("prop") = [my pcl]
      getPropertyChangeListeners() = [java.beans.PropertyChangeListenerProxy@17ec251]

            denis Denis Fokin (Inactive)
            dbessono Dmitry Bessonov
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: