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

    +146

    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
    package gargoyle.xenox.game;
    
    import gargoyle.util.log.Log;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    
    @SuppressWarnings("rawtypes")
    public abstract class Persistent<T extends Persistent> implements Serializable {
      private static final long serialVersionUID = 1L;
    
      private File file(final Class<? extends Persistent> clazz) {
        return new File(System.getProperty("user.home"), clazz.getName() + ".dat");
      }
    
      @SuppressWarnings("unchecked")
      final protected T load(final Class<T> clazz) {
        ObjectInputStream in;
        try {
          in = new ObjectInputStream(new FileInputStream(this.file(clazz)));
          return (T) in.readObject();
        } catch (final IOException e) {
          Log.error(e);
        } catch (final ClassNotFoundException e) {
          Log.error(e);
        }
        return null;
      }
    
      final protected void save(final T o) {
        ObjectOutputStream os = null;
        try {
          os = new ObjectOutputStream(new FileOutputStream(this.file(o.getClass())));
          os.writeObject(this);
          os.flush();
        } catch (final IOException e) {
          Log.error(e);
        } finally {
          try {
            if (os != null) {
              os.close();
            }
          } catch (final IOException e) {
            Log.error(e);
          }
        }
      }
    }

    такой вот забавный сериализатор получился
    причина - запутался в генериках

    Запостил: Lure Of Chaos, 21 Февраля 2011

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

    • за @SuppressWarnings нужно наказывать, жестоко наказывать
      Ответить
      • На уровне класса -- да. На уровне небольшого метода -- допустимо. Лучше заткнуть непроверяемое преобразование в одном специальном методе, чем нервничать при каждой компиляции (и проигнорировать предупреждения о настоящих ошибках).
        Ответить
    • Java уже не та.
      Ответить
      • а что вас смущает?
        Ответить
        • изначально жаба делалась как объектно-ориентированный язык без вот этой самой сиплюспоюсной поеботы. Более того для Гослинга это было приоритетом - тогда в середине 90х. Ничего лишнего. все в синтаксисе только по делу и тд. и таки она в таком виде доставляла. даже до версии 1.5 нехило так доставляла(даже не смотря на то что до кучи базовых АПИ взяли и изменили). а потом начала катиться в сраное говно с замыканиями, директивами для компилятора и прочей еботой. :(
          Ответить
          • что-то вы не того.
            а. замыканий как не было, так и нет - анонимные классы едва заменяют их в извращенном виде
            б. директив для компилятора как не было, так и нет (имею ввиду препроцессор и всякое такое). Аннотации это не совсем то, поскольку инфа может быть доступна или недоступна и в рантайме

            кстати, аннотации и генерики - это очень вкусно. Я рад, что они появились, особенно генерики.

            но вот с ужасом ожидаю, во что превратится 7ая версия - обещали тучу путающего сахара.
            Ответить
            • в той жабе которой я писал свинг только начинался и анонимных классов не было. и ничего. все прекрасно жили.
              да типа новые возможности и тд. но нужно ли это приторное говно в ЯП в принципе?
              Ответить
              • а на заре компьютеров даже ассемблеров не было, сначала вбивали машинные команды в двоичном коде а потом hex-редактор придумали. и ничего. все прекрасно жили.
                Ответить
                • я про то что жаба не имела избыточного синтаксического говна как си++ и прочие. что давало охуенную однозначность и понятность исходного кода. а вы идите и дальше вбивайте свой говнокод на перфокарты
                  Ответить
                  • >> однозначность исходного кода
                    а компилятор случайным образом выбирает какой вариант многозначного кода выполнять
                    >> понятность исходного кода
                    на любом языке можно совершенно непонятную хуиту написать
                    >>вбивайте свой говнокод на перфокарты
                    щас, только JVM на перфокартах спаяю
                    Ответить
                    • >щас, только JVM на перфокартах спаяю
                      обязательно выложите ее в опенсорс
                      Ответить
                      • <cite>"...чувак бегал с воздушным змеем за молнией и все говорили, что он занимается хуйней.
                        А он потом изобрел электричество..."</cite>
                        Ответить
                        • с воздушным змеем? за молнией? oh really? диснеевских мультов пересмотрели?
                          Ответить
                          • Аллегория.
                            Помыслите, немножко, абстрактно
                            Ответить
                          • почему диснеевских? я это в Бивисе и Баттхеде видел
                            Ответить
                          • Не волнуйтесь, потом его таки молнией долбануло, а светилом российской науки стал Михаил Васильевич Ломоносов.
                            Ответить
                        • Капитан сообщает нам, что электричество изобрести нельзя.
                          Ответить
                    • > а компилятор случайным образом выбирает какой вариант многозначного кода выполнять

                      i=++i+++i;
                      Ответить
                      • БЛЯ.
                        Ответить
                      • сишный боян как же заколебал.
                        Ответить
                      • в чем разница между сишником и пхпшником?
                        сишник имеет мнение на счет того, как должен работать код, даже если компилятор не уверен.
                        пхпшник не очень уверен как работает его код даже тогда, когда интерпретатор в этом уверен
                        Ответить
                        • пхпшники вообще редко уверены в чём-либо помимо "поесть", "попить" или "выгулять"
                          Ответить
                    • Вы зря иронизируете.
                      Если существует 48 способов решить одну и ту же задачу, то языку это только во вред.
                      Ответить
              • анонимные классы это гавнецо, Ваша правда.
                правда в жабе например нет делегатов как в C#, которые еще хуже, потому что они -- замаскированное говнецо.

                в любом случае жаба, при всем ее минусах, сейчас является наименее дерьмовым языком для целого ряда задач, в основном конечно для энтерпрайз
                Ответить
          • До 1.5 жавой пользоваться было невозможно. Добровольно, по крайней мере.
            Ответить
          • Вы шутите же
            замыканий слава богу там нет
            аннотации -- да, говно и понос, но и без них пока можно.
            вот комманда javaee верит в аннотации, потому javaee никто и не использует.

            а замыканий, варов, и прочей сишарп поебени там нет
            Ответить
            • вот и хвала аллаху, что жаба - это не шарп
              Ответить
            • Чем var так не угодил?
              Ответить
              • это же в конце концов не dynamic
                Ответить
                • Да, это не динамик, это строгая статическая типизация.
                  Ответить
              • статическая типизация полезна когда она очевидна не только программисту, но и разработчику
                Ответить
                • Нужно код писать и читать не в Блокноте, а в IDE - и всё понятно.
                  А применение var даёт сокращение кода - разве это плохо?
                  И как без var с анонимными типами быть?
                  Ответить
                  • 1) что "все понятно"? у Вас IDE заменяет VAR на имя класса?
                    2) указывать тот ифейс (или базовый класс) который он расширяет (как в жабе)
                    3) сокращать код это плохо. Потому что код должен быть легко читаемый. Иначе все функции были бы из трех-пяти букв, а переменные -- из одной.
                    Ответить
                    • 1. Наводишь мышкой на переменную - появляется её описание.

                      Насчёт анонимных типов, думаю, сказать нечего? ;)
                      Ответить
                      • 1. сразу видно, что Вам не приходилось читать много чужого кода.

                        >>Насчёт анонимных типов, думаю, сказать нечего? ;)
                        я сказал. посмотрите пункт 2. Вы просто видимо не поняли. Потому поясню на пальцах:

                        Runnable myAnonRunnable = new Runnable() {
                         @Override 
                         public void run() {
                           //
                          }
                        }
                        Ответить
                        • И что, если написать
                          var myAnonRunnable = new Runnable() {

                          то что-то непонятно?

                          И не вижу анонимного типа в вашем коде.
                          ЗЫ: тонкостей Жавы не знаю.
                          Вижу перегруженный метод, но зачем так сделано - хз.
                          Если будет два объекта Runnable, с разными методами run, то как узнать, какой метод run у какого? Навести мышкой, и появится подсказка??
                          Ответить
                          • 1) да, будет хуже. Особенно будет хуже если написать
                            var foo = getFoo();


                            рассказываю: в моем примере описан анонимный класс с интерфейсом Runnable и методом run, и ссылка на этот анонимный класс имеет тип runnable.

                            Теперь возьмем типовой пример вара, что бы понять что он -- дерьмо.
                            Обратимся для этого к microsoft. Ребята из редмонта продемонстрировали свой var таким вот примером:

                            http://msdn.microsoft.com/en-en/library/bb383973.aspx
                            foreach (var item in custQuery)
                            {
                            //....
                            }

                            какого типа тут item?
                            правильный ответ -- "я мышку на переменную наведу"?

                            var был придуман для поддержки linq, и без var действительно linq не сделать, но linq -- это другая, еще более ужасная чем var, гадость)
                            Ответить
                            • Если имеется несколько объектов типа runnable, то как узнать, что делает run? Ведь у каждого может быть своё поведение. Ах, да, это же жаба, это не считается говнецом. :)


                              Ну да, linq - гадость. ФП - гадость, декларативность - гадость, МП - гадость.

                              Парадокс Блаба, нэ?
                              Ответить
                              • Я не понимаю Вашего вопроса. Имеется стопицот объектов предоставляющих интерфейс Runnable. Как тут поможет var?

                                >>Парадокс
                                вовсе нет. просто в мире микрософт принято ссать кипятком от любого изобретения. придумали реестр -- это же гениально!!
                                отказались от реестра в пользу .config файлов -- это же гениально!!
                                придумали enterprise library -- это же гениально!!
                                выбросили ее на помойку -- это же гениально!!
                                придумали ком -- это же гениально!!
                                объявили ком говном -- это тоже гениально

                                наверное по-этому коммерческий энтерпрайз и компании типа яндекса и гугла не спешат пересажиться на дотнет)))
                                Ответить
                                • Угу, парадокс Блаба в действии...
                                  Ответить
                                  • Вы зря иронизиуете)
                                    Я перешел на жабу с дотнета вполне осознанно.
                                    Не нужно приписывать мне ПХПные комплексы "если я чего-то непонимаю -- значит это не нужно".
                                    а вот Вам бы наверное следовало изучить еще что нить кроме C#, что бы знать альтернативные подходы к анонимным классам, например)
                                    Ответить
                                    • Кроме C# знаю ещё кое-что. Но не суть.

                                      Дело в чём. Если внезапно в Яве появятся новые плюшки - станете использовать? Наверняка, да.
                                      Если жизнь заставит перейти на Шарп (допустим, больше зарплату предложат, вакансий на жаве не будет) - будете использовать linq и т.п. или будете писать на C# под .net1.1? Думаю, ответ очевиден.


                                      Добавлю. Заставит жизнь перейти на жабу - ныть не буду, что чего-то не хватает - буду работать.
                                      Ответить
                                      • >>Если внезапно в Яве появятся новые плюшки - станете использовать?
                                        Читали "Совершенный код"?
                                        Там есть чудесная фраза: "программируйте С ИСПОЛЬЗОВАНИЕМ языка а не на языке" . В джаве есть гавняшки, которые я не использую. Например CDI (депенденси инджекшен на аннотациях), потому что я считаю это нарушеним принципов DI.

                                        >>Думаю, ответ очевиден.
                                        Вовсе нет) Если бы мне было пофиг, чем заниматься -- трудовой путь мой был бы куда более прямой.

                                        В независимости от языка и платформы (C# 2.0 мне кстати нравился кроме паричал классов и делегатов) есть вещи которые я объективно считаю злом
                                        Ответить
                    • Зачем заменять var на имя класса?
                      Насчет сокращений, что лучше:
                      var it = container.begin() или
                      list<map<MegaSuperUltraType<AnotherMegaS uperUltraTypeType>, GigaTera100500Class> >::iterator it = container.begin() ?
                      Ответить
                • программист-разработчик! программист чего и разработчик чего?
                  Ответить

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