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

    +75

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    public static class FuckMeGentlyWithAChainsaw {
        /* This wrapper class exists to work around the possibly most
        * stupid Java bug ever (and that's saying a lot): That
        * URL.equals and URL.hashCode do DNS lookups and
        * block. Which, of course, not only sucks performance-wise
        * but also breaks actual correct URL equality. */
        public final URL url;
        public FuckMeGentlyWithAChainsaw(URL url) {
            this.url = url;
        }
    }

    Код из клиента одной онлайн игрушки, процитирован дословно.

    Запостил: bormand, 31 Июля 2012

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

    • <3
      Ответить
    • Версия жавы?
      Ответить
      • Ну собирается на шестой-седьмой, но это не важно:

        Two hosts are considered equivalent if both host names can be resolved into the same IP addresses; else if either host name can't be resolved, the host names must be equal without regard to case; or both host names equal to null.

        Since hosts comparison requires name resolution, this operation is a blocking operation.
        Ответить
        • я вот что то не понял, какой вообще смысл сравнивать url по айпишникам, на которые они резолвятся? не сходится ни с виртуальным хостингом, ни с зеркалированием
          Ответить
          • ip сравниваются быстрее чем строки
            Ответить
          • Не было тогда Блоха с его Effective Java.

            И не было ещё понимания, что URL - это синтаксическая конструкция, и что сравнивать её нужно синтаксически. Сановцы, поди, думали (писалось-то это в суровые девяностые и предназначалось в основном для загрузки всяких картинок в апплеты): вот мы какие опупеть крутые, сравниваем URL семантически!

            И не было понимания того, что в equals и hashCode нельзя выполнять дорогие операции.
            Ответить
          • Очень глупо они реализовали этот equals. Если имя резольвится в несколько ойпи, то http://google.ru с некоторой вероятностью не равно http://google.ru, я молчу про виртуалхосты ;)

            Кстати в документации ниже об этом сказано:
            Note: The defined behavior for equals is known to be inconsistent with virtual hosting in HTTP.
            Ответить
    • А java.net.URI не спасёт гиганта мысли? URL, по сути, deprecated, единственное, что есть у URL и нет у URI - это openStream.
      Ответить
    • - Так вот, мы предлагаем тебе самый разумный выход из ситуации. Ты остаёшься у нас, у меня есть связи в Москве, мы выясняем всё про твою квартиру, а потом видно будет.
      Ответить

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