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

    +68

    1. 1
    2. 2
    3. 3
    if (url == null) {
     throw new RuntimeException("Error reading resource " + url.getFile());
    }

    ха.
    туториалы jogl

    Запостил: Lure Of Chaos, 11 Ноября 2010

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

    • null.getFile() - это круто.
      а в обжекстив си бы скомпилилось и даже не упало.
      Ответить
      • тут тоже и скомпилилось, и упадет в том же случае, только с другим мессежем. что затруднит восприятие причины.
        так что не понимаю, при чем тут обж си
        Ответить
        • в основном при том, что согласно заветам смолталка, мессаджи могут быть отправлены чему угодно. даже nil.
          Ответить
        • Ну как сказать. Не затруднит совсем. Но с таким же успехом можно было не писать throw. Да впринципе он там вообще бессмысленет по сути, и даже мешает.
          Ответить
      • Не знаю как в Java, но в С++ аналогичное будет работать, если в методе не используются внутренние поля объекта. В частности, если метод статический.
        Ответить
        • Если метод статический, то будет работать.

          А вот если метод не статический и виртуальный, то не будет даже если внутренние поля не используются.

          В Java все нестатические методы виртуальные.
          Ответить
          • >А вот если метод не статический и виртуальный, то не будет даже если внутренние поля не используются.
            Это потому, что тут используется vtable, указателя на который нет.
            Ответить
            • Да. Поэтому в Java вызывать нестатический метод у null нет смысла.

              Статический метод вызывать в виде url.getFile() тоже нет смысла, так как чтобы подчеркнуть его статичность можно вызвать Url.getFile() // или какой там тип у этого url.

              Вызов статического метода у экземпляра по идее и ворнинг должен стриггерить.
              Ответить
              • >>Вызов статического метода у экземпляра по идее и ворнинг должен стриггерить.
                инспекции IDEA ругаются
                компилятор -- нет
                Ответить
                • это небольшая непонятка, т.к. null это бестиповой, вроде void в си.
                  void a(A aa){}
                  void a(B bb){}
                  void test() {
                  a(null); // неоднозначность!
                  }
                  Ответить
                  • но можно же привести к типу, не?
                    void a(A aa){}
                    void a(B bb){}
                    void test() {
                    a((A)null);
                    a((B)null);
                    }
                    Ответить
        • В VB.NET подобное тоже работает, если внутри объект не обращается к своим полям, а вот в C# - нет.
          Ответить
      • тут тоже скомпалица) и будет жирный NPE) если коненчо люди не сошли с ума и метод не статический
        а за кидание рантайм бьют по рукам
        Ответить

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