Jawa / Говнокод #4587 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
/**
     * Returns an array of all the objects currently registered
     * as <code><em>Foo</em>Listener</code>s
     * upon this <code>Component</code>.
     * <code><em>Foo</em>Listener</code>s are registered using the
     * <code>add<em>Foo</em>Listener</code> method.
     *
     * <p>
     * You can specify the <code>listenerType</code> argument
     * with a class literal, such as
     * <code><em>Foo</em>Listener.class</code>.
     * For example, you can query a
     * <code>Component</code> <code>c</code>
     * for its mouse listeners with the following code:
     *
     * <pre>MouseListener[] mls = (MouseListener[])(c.getListeners(MouseListener.class));</pre>
     *
     * If no such listeners exist, this method returns an empty array.
     *
     * @param listenerType the type of listeners requested; this parameter
     *          should specify an interface that descends from
     *          <code>java.util.EventListener</code>
     * @return an array of all objects registered as
     *          <code><em>Foo</em>Listener</code>s on this component,
     *          or an empty array if no such listeners have been added
     * @exception ClassCastException if <code>listenerType</code>
     *          doesn't specify a class or interface that implements
     *          <code>java.util.EventListener</code>
     *
     * @see #getComponentListeners
     * @see #getFocusListeners
     * @see #getHierarchyListeners
     * @see #getHierarchyBoundsListeners
     * @see #getKeyListeners
     * @see #getMouseListeners
     * @see #getMouseMotionListeners
     * @see #getMouseWheelListeners
     * @see #getInputMethodListeners
     * @see #getPropertyChangeListeners
     *
     * @since 1.3
     */
    public <T extends EventListener> T[] getListeners(Class<T> listenerType) { 
        EventListener l = null; 
        if  (listenerType == ComponentListener.class) { 
            l = componentListener;
        } else if (listenerType == FocusListener.class) {
            l = focusListener;
        } else if (listenerType == HierarchyListener.class) {
            l = hierarchyListener;
        } else if (listenerType == HierarchyBoundsListener.class) {
            l = hierarchyBoundsListener;
        } else if (listenerType == KeyListener.class) {
            l = keyListener;
        } else if (listenerType == MouseListener.class) {
            l = mouseListener;
        } else if (listenerType == MouseMotionListener.class) {
            l = mouseMotionListener; 
        } else if (listenerType == MouseWheelListener.class) {
            l = mouseWheelListener; 
        } else if (listenerType == InputMethodListener.class) {
            l = inputMethodListener; 
        } else if (listenerType == PropertyChangeListener.class) {
            return (T[])getPropertyChangeListeners();
        }
        return AWTEventMulticaster.getListeners(l, listenerType);
    }

как вы думаете, что это? внутренности Java
java.awt.Component

Запостил: Lure Of Chaos Lure Of Chaos, (Updated )

Комментарии (42) RSS

    • Молодец )) Вместо того чтоб поучиться взял да и плюсанул.

      Ну - минусуйте меня теперь за то что я сказал ))))
      Ответить
    • В китайском переборе значений listenerType =)
      Можно же было использовать хотя бы switch на худой конец, а еще лучше собрать все значения в массив и по нему ходить!
      Ответить
      • switch в жабе бывает только по примитивам не больше инта

        массив был бы лучше, но может это такая говнооптимизация
        Ответить
        • Ок, про switch глупость сказал)
          Я тоже сначала подумал про оптимизацию
          Ответить
        • а чуть лучше массива - какой-нибудь List<? extends EventListener>, как конкретный лучше Vector
          Ответить
            • что вы говорите? Но он совсем даже не deprecated
              скорее, он обрел новое дыхание, став синхронизированным, и при этом реализуя упомянутый интерфейс. Совместно с ArrayList, который не синхронизирован и, будучи при этом non thread-safe, дает выигрыш в скорости.
              То есть, не всегда нужно в срочном порядке выкидывать его из кода, как тот же Hashtable
              з.ы. он все еще жив и вполне используется,например, в качестве модели для JList, JComboBox
              Ответить
              • это тяжелое наследие.
                синхронизировать лучше через спец утилиты Collections.
                или вообще конкаррент коллекшинс юзать
                Ответить
      • switch с брэйками и if-elsif — одного поля ягоды.
        да и писать case и break достаёт, к тому же в if-elsif ты не ограничен "=="

        А массив — да, хорошее решение.
        Ответить
        • Switch как раз и придумали для того, чтобы не писать кучу однотипных if'ов, с сравнением "==". Наглядность повышается. Опять кэп.
          Ответить
          • Скажу по секрету switch сделан для автоматного программирования.
            Недаром там по умолчанию идёт сквозной проход по всем условиям. (это когда без брэйков).

            http://bit.ly/d9em9Y
            http://bit.ly/byYFvh
            Ответить
            • >switch сделан для автоматного программирования

              Я с тем же успехом могу заявить, что функции были придуманы исключительно для организации рекурсивных вычислений, как будто у них нет других применений.
              Ответить
              • да это да. Я просто хотел поправить.
                Соглашусь, что читабельность лучше в свитче.
                Ответить
            • живет на свете язык, у которого нет сквозного прохода даже без брейка)
              знаете какой?
              Ответить
              • оло-ло! Перл - язык без сквозного заднего прохода! и это здорово!

                сквозной проход там делается с помощью continue.
                Ответить
                • c версии 5.10 есть, только называется не switch/case
                  use feature ":5.10";
                      given($foo) {
                  	when (undef) {
                  	    say '$foo is undefined';
                  	}
                  	when ("foo") {
                  	    say '$foo is the string "foo"';
                  	}
                  	when ([1,3,5,7,9]) {
                  	    say '$foo is an odd digit';
                  	    continue; # Fall through
                  	}
                  	when ($_ < 100) {
                  	    say '$foo is numerically less than 100';
                  	}
                  	when (\&complicated_check) {
                  	    say 'a complicated check for $foo is true';
                  	}
                  	default {
                  	    die q(I don't know what to do with $foo);
                  	}
                      }
                  Ответить
                  • Я знаю. Но, спасибо, что сказали (если б не знал, было бы приятно).

                    А сквозной проход, как я сказал выше, делается с помощью continue.
                    Ответить
              • AFAIK, во всех языках, чей синтаксис не происходит от С.
                Ответить
        • А чё, жаба не умеет свитч в двоичный поиск или таблицу переходов компилировать?
          Ответить
  • блин в сырцах пекеджа со свингом говна вообще хватит весь этот сайт наполнить.
    но оно унылое по большей части.
    Ответить
  • По-моему, вполне здоровый KISS. Было бы куда хуже, если бы для обработки этих условий, которые можно на пальцах пересчитать, принялись бы городить очередной фреймворк.
    Ответить
      • Каждый второй уважающий себя последователь GOF непременно соорудил бы на этом месте фабрику, хотя бы крошечную. Коллекция -- все-таки в первую очередь хранилище данных и средство производить над элементами более сложные операции, чем "выбрал и забыл" -- как в нашем случае.
        Ответить
      • Привет. Напиши мне в асечку пожалуйста: 421882816. есть разговор.
        Написал под старым постом, что бы моего коммента никто не увидел=)
        Ответить
        • > Написал под старым постом, что бы моего коммента никто не увидел=)
          Хех, наивный :)))
          Ответить
          • Кстати, было бы не плохо если бы и ты написал, к тебе тот же разговор)
            Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8