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

    +76

    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
    /* ------------------------------------------------------------ */
        private boolean isJspServlet ()
        {
            if (_servlet == null)
                return false;
            
            Class c = _servlet.getClass();
            
            boolean result = false;
            while (c != null && !result)
            {
                result = isJspServlet(c.getName());
                c = c.getSuperclass();
            }
            
            return result;
        }
        
        
        /* ------------------------------------------------------------ */
        private boolean isJspServlet (String classname)
        {
            if (classname == null)
                return false;
            return ("org.apache.jasper.servlet.JspServlet".equals(classname));
        }

    Копался в исходниках Jetty

    Запостил: konsoletyper, 26 Июля 2012

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

    • return _servlet != null && JspServlet.class.isAssignableFrom(_servlet.getClass());


      Fixed?
      Ответить
      • >Fixed?
        -> http://govnokod.ru/11479
        Ответить
      • На самом деле, всё несколько сложнее, если учитывать архитектуру класслоадеров. Должно быть вроде
        if (_servlet == null)
                    return false;
        try {
            Class<?> cls = Class.forName("org.apache.jasper.servlet.JspServlet", false,
                    _servlet.getClass().getClassLoader());
            return cls.isInstance(_servlet);
        } catch (ClassNotFoundException ex) {
            return false;
        }


        Но всё равно, код Jetty поражает рядом дурацких вещей вроде ненужного сравнения с null в isJspServlet(String) или паскалеподобным стилем выхода из цикла.
        Ответить
        • Почему паскалеподобным? Потому что break и continue - Borland-specific?
          Ответить
          • Может не из цикла, а из процедуры он имел в виду?
            return result
            Ответить
            • у процедуры ж нет возвращаемого типа, насколько я помню пацкаль
              Ответить
      • Всё праильно, но почему не упростить еще?
        return _servlet != null && _servlet instanceof JspServlet; 
        
        //А если еще и вспомнить что instanceof проверяет на null, то достаточно
        
        return _servlet instanceof JspServlet;

        Ответить
        • instanceof возвращает true, если аргумент равен null.
          Ответить
          • неужели
            http://ideone.com/dAWie
            В шарпе быть может и возвращает, не проверял, в жабе - нет.
            Ответить
          • Т.е. null instanceof любого типа? Ну какая-то логика в этом есть (ссылка на объект любого класса может быть нуллом), но это же неюзабельно...

            P.S. http://ideone.com/MYkvT
            Ответить
            • >ссылка на объект любого класса может быть нуллом
              >instanceof
              А инстанс не может.
              Да и вообще надо помнить о SQLных nullах. Они даже друг дружке не равны.
              Ответить
              • > А инстанс не может.
                Тогда уж так: "null не может быть инстансом [никакого класса]".
                Ответить
                • Ну разве что Void :D
                  Ответить
                  • А у void'а вообще нет инстансов ;)
                    Ответить
                    • кстати, мануал к scala.Nothing: Nothing is - together with Null - at the bottom of Scala's type hierarchy.

                      Nothing is a subtype of every other type (including Null); there exist no instances of this type. Although type Nothing is uninhabited, it is nevertheless useful in several ways. For instance, the Scala library defines a value scala.collection.immutable.Nil of type List[Nothing]. Because lists are covariant in Scala, this makes scala.collection.immutable.Nil an instance of List[T], for any element of type T.

                      Another usage for Nothing is the return type for methods which never return normally. One example is method error in sys, which always throws an exception.
                      Ответить
                    • >А у void'а вообще нет инстансов ;)
                      http://ideone.com/S4HaU
                      void f(void){
                              return void();//Создаем и возвращаем инстанс вйода.
                      };
                      результат: успешно	     время: 0.01s    память: 2676 kB     возвращаемое значение: 0
                      Ответить
                      • Окай, а теперь положи этот "инстанс" в переменную.
                        Ответить
                        • http://ideone.com/m9B69
                          void f(){
                                  return void();//Создаем и возвращаем инстанс йода.
                          };
                           
                          int main() {
                                  void a = f();
                                  const void& b=a;
                                  return 0;
                          }
                          результат: успешно	     время: 0.01s    память: 2676 kB     возвращаемое значение: 0


                          PS: Хотел что-то спросить по Хаскелю, а потом забыл.
                          Ответить

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