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

    −25

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    public final class FeedReaderContract {
        // To prevent someone from accidentally instantiating the contract class,
        // give it an empty constructor.
        public FeedReaderContract() {}
    }

    http://developer.android.com/training/basics/data-storage/databases.html
    Надёжно защитили

    Запостил: roman-kashitsyn, 20 Апреля 2016

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

    • лол)

      на самом деле смешно конечно что в жабке надо делать приватный конструктор чтобы тебя не инстранциировали

      немного костыль, не находите?
      Ответить
      • > немного костыль, не находите?

        Виновато ООП головного мозга. В плюсах запилил нэймспейс - и норм. Вроде даже в оопическом раби догадались "модули" сделать, у которых инстансы создавать не надо.
        Ответить
        • > В плюсах запилил нэймспейс - и норм.
          В жабе запилил пакет - и норм.
          Все кто лезут в твой пакет ССЗБ.
          Ответить
          • пакет != namespace, к сожалению

            в жабе нету неймспейсов
            Ответить
        • а вот если я ничего не путаю, то в C# можно сказать типа "static", нет?
          Ответить
      • Так в сабже публичный же.
        Я правда не понял накуя.
        Ответить
        • Ошибка в доке, должен быть приватный. В этом суть :)
          Ответить
          • А, понятно.

            Но можно ещё сделать
            public FeedReaderContract() {
              throw new NahuiException();
            }
            Ответить
    • Зачем писать кучу модификаторов, если не знаешь зачем они?

      >class FeedReaderContract {
      Почему редкий кодер пишет так? Какие-то защиты дурацкие, запрет наследования, privatы. Накуууя?
      Кому сильно надо тот и рефлексией доберется.
      Ответить
      • Кому вообще понадобится ньюкать этот класс, если непонятно накуя он вообще?

        Пойду-ка я создам себе инстанс FeedReaderContract, на всякий случай.
        Ответить
        • И мне создайте, если можно. Заранее спасибо.
          Ответить
        • А что стратегические запасы его инстансов на исходе???
          Боже, надо срочно садиться в JVM и ехать по магазинам пока их не разобрали.
          Ответить
          • > на исходе
            Да. Скоро же на private исправят, новых экземпляров больше не будет... А старые будут втридорого продавать.
            Ответить
            • Да и на разводняк можно попасть: втюхают какой-нибудь китайский FeedReederContract из вонючего пластика...
              Ответить
    • А
      abstract class FeedReaderContract {...}
      им религия не позволяет? Или я чего-то не понимаю в джаве?
      Ответить
      • От абстрактного класса можно унаследовать и создать объект подкласса. В Effective Java расписано, почему идиома с приватным конструктором лучше.
        Ответить
        • Понятно. Тогда смысл "public FeedReaderContract()" становится ещё более туманным...
          Ответить
          • Это ошибка в доке, инфа 146%.
            Ответить
            • Но при этом они пишут: «... give it an empty constructor». Конструктор (который никто вызывать не должен) непременно должен быть пустым.

              Зачем требование пустоты конструктора? Чтобы если всё-таки случайно создали экземпляр, ничего страшного не случилось?
              Ответить
        • А final такого не делает?
          Если не делает, почему бы его не выпилить?
          Ответить
      • abstract final class FeedReaderContract {...}
        Ответить
        • public abstract final class FeedReaderContract {
              private FeedReaderContract() { throw new UniverseSimulationError(); }
          }

          Вот теперь супостаты точно не прорвутся!
          Ответить
          • >abstract final
            Ага. Особенно учитывая что код просто не скомпилится.
            Ответить
            • Ну дык цель в том, чтобы инстанс не создали. Не скомпилится - значит уж точно не создадут.
              Ответить
              • Дзенский внутри меня говорит следующее:
                Может проще вовсе не писать класс, чтобы его не создавали?

                Это как хлопок одной ладонью.
                Ответить
                • Может не в том дело, чтобы не создавали экземпляры класса, а чтобы не создавали где попало?
                  Я иногда использую приватные конструкторы по умолчанию, чтобы быть уверенным, что нигде, кроме как в статик методах того же класса, конструкторы не вызываются.
                  Ответить
                • > Может проще вовсе не писать класс, чтобы его не создавали?
                  И ведь в крестах так и делают...
                  Ответить
                • по пизде
                  Ответить
            • Вот вечно в этой вашей джаве что-то не так...
              Ответить

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