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

    +144

    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
    class  JNewConnectionPanel extends JPanel {
    
     public JNewConnectionPanel() {
        this(true, false);
      }
    
      public JNewConnectionPanel(final boolean ok, final boolean cancel) {
        // ...
        if (ok) {
          // ...
        }
        if (cancel) {
          // ...
        }
        // ...
      }
    
     // ...
    }

    продолжаю макакакодить = )

    Запостил: Lure Of Chaos, 23 Октября 2010

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

    • омг, а нахрена final var у конструктора?
      Ответить
      • 1. final уберегает от плохой практики присваивать параметрам значения
        2. final переменная видна из анонимных классов, таких, как слушатели
        3. вообще final (не параметрам и не конструктора, а, например, полям) помогает контролировать изменяемость параметров - в яве нужно по возможности повторно использовать обьекты
        Ответить
        • Как у вас на яве все хорошо =)
          Ответить
        • аа, может Вы еще и все классы объявляете или abstract или final ("проектируйте наследование или запрещайте его явно" (С) Дж.Блох)
          Ответить
          • abstract - если предполагаю обязательное расширение подклассами, при этом методы часто бывают final
            final - если наследование не имеет смысел
            Ответить
            • спасибо КО.

              Блох говорил что все классы должны быть или абстрактными (во всяком случае с мануалом по расширеню в жавадоке) или финальными.
              Дескать в идеальной архитектуре третьего не до. Иначе кто-то наверняка нарушит контракт (принцип лискоу)
              Ответить
              • ну почему КО? это я так делаю, согласно личным убеждениям. Когда как многие вообще финалами не заморачиваются.

                я допускаю третий случай, что можно пользоваться классом и так, а можно добавить функциональности. Но при этом я большинство методов делаю финальными
                Ответить
        • Ставить final примитивам не имеет абсолютно никакого смысла - они передаются по значению.
          Также абсолютно не имеет смысла ставить final ссылкам на коллекции - само содержание коллекции можно изменить.
          Потому в сишке еще есть смысл ставить const куда не лень, а в Java же final для переменной (а не класса или метода) имеет смысл только для доступа из анонимного класса к внешней переменной.
          Ответить
          • не скажите.
            1.final это не имеет значения, что по значению
            void m(int p) {
            p=1;
            }

            этот кусок компилируется, хоть и не имеет смысла. второй кусок просто не скомпилируется
            void m(final int p) {
            p=1;
            }


            2. final для поля, например, коллекции позволит ее изменение, но запретит изменять ссылку на нее, что может как помочь повторно использовать обьекты (например, заставит написать v.clear() вместо v=new Vector() ), так и избавит от необходимости при обновлении синхронизировать содержание - например, с визуальным элементом навроде JList.

            если же нам надо запретить изменение коллекции, можно воспользоваться одним из утилитных методов, например, обернуть в неизменяемый список, методом Collections.unmodifiableList(list)
            Ответить
    • А в чем, собственно, суть?
      Ответить
      • ok=!cancel; // К.О.
        Ответить
        • Ну это из контекста не очевидно совсем. Я бы например по названию класса сказал бы, что это окно с кнопками. А Ok и Cancel задают наличие соответствующих кнопок. Так что пояснения бы не помешали при публикации ГК.
          Ответить
    • Шото много логики для одного класса.
      Сколько там строчек после каждого if?

      и что за названия переменных? Не лучше ли передавать массив типов кнопок, которые можно нажать?
      Ответить
    • vanished
      Ответить

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