1. Java / Говнокод #4587

    +145

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 11 Ноября 2010

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

    • Плюсанул только потому что это внутренности жабы.
      Ответить
      • Молодец )) Вместо того чтоб поучиться взял да и плюсанул.

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

          массив был бы лучше, но может это такая говнооптимизация
          Ответить
          • Ок, про switch глупость сказал)
            Я тоже сначала подумал про оптимизацию
            Ответить
          • а чуть лучше массива - какой-нибудь List<? extends EventListener>, как конкретный лучше Vector
            Ответить
            • Vector устарел в жабе 1.2
              Ответить
              • что вы говорите? Но он совсем даже не 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.
                      Ответить
                    • можно просто "use v5.10;"
                      Ответить
                  • >>язык без сквозного заднего прохода
                    ой мамочки!
                    Ответить
                • AFAIK, во всех языках, чей синтаксис не происходит от С.
                  Ответить
                • В Паскале нет сквозного прохода.
                  Ответить
              • вот нафига прятать педивикию? БОЯН!
                Ответить
                • чтоб ссылка была меньше, а не сплошное %AB%CD%EF
                  Ответить
                  • почувствуйте разницу!
                    http://lurkmore.ru/Хороший,_годный
                    http://lurkmore.ru/%D0%A5%D1%83%D0%B8%D1%82%D0%B0
                    http://bit.ly/fyVo6T
                    Ответить
                    • да было лень переписывать.
                      Ответить
                      • Переписывать? Что?
                        Совсем забыл, что FF и подобные игрушки представляют кириллические УРЛ в виде %D0%A5... Опера кириллицу отображает кириллицей.
                        Жду очередной Священной войны.
                        Ответить
          • А чё, жаба не умеет свитч в двоичный поиск или таблицу переходов компилировать?
            Ответить
    • блин в сырцах пекеджа со свингом говна вообще хватит весь этот сайт наполнить.
      но оно унылое по большей части.
      Ответить
      • и не только со свингом. но особо унылое не хочется постить
        Ответить
    • По-моему, вполне здоровый KISS. Было бы куда хуже, если бы для обработки этих условий, которые можно на пальцах пересчитать, принялись бы городить очередной фреймворк.
      Ответить
      • зачем фреймворк? обыкновенный массив(т.е. коллекция) и все
        Ответить
        • Каждый второй уважающий себя последователь GOF непременно соорудил бы на этом месте фабрику, хотя бы крошечную. Коллекция -- все-таки в первую очередь хранилище данных и средство производить над элементами более сложные операции, чем "выбрал и забыл" -- как в нашем случае.
          Ответить
        • Привет. Напиши мне в асечку пожалуйста: 421882816. есть разговор.
          Написал под старым постом, что бы моего коммента никто не увидел=)
          Ответить
          • > Написал под старым постом, что бы моего коммента никто не увидел=)
            Хех, наивный :)))
            Ответить
            • Кстати, было бы не плохо если бы и ты написал, к тебе тот же разговор)
              Ответить

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