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

    +133

    1. 1
    http://www.quizful.net/interview/java/k4gCs7Qmf8YF

    Мне кажется, или кто то накурился?

    если я не прав - обьяните(

    Запостил: kegdan, 28 Августа 2013

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

    • Мутноватый ответ какой-то. А какой конкретно момент интересует?
      Ответить
      • Ну ведь ответ не верен.
        какая разница, как обращаться, эффект будет один и то же. Только если не перегрузить свойство
        Ответить
        • Геттер/сеттер позволяют сделать поле вычислимым и/или полиморфным, т.е. предоставляют абстракцию данных. В ответе написан несвязный бред.
          Ответить
          • не побоюсь показаться нубом - что значит вычислимым?

            А полиморфным... можно конечно, но, имхо, если поле нуждается в особом обращении в каждом классе - нужно делать явные полиморфные методы Get и Set.
            Ответить
            • > что значит вычислимым
              Ну т.е. поля физически нет. Геттер считает его значение на лету. Сеттер, если есть, пишет куда-нибудь в другое поле.

              Пример:
              private int left, top;
              private int width, height;
              
              int getBottom() {
                  return top + height;
              }
              
              void setBottom(int y) {
                  height = y - top;
              }
              Ответить
              • значит я просто название не знал, мое чсв в норме)
                Ответить
            • > если поле нуждается в особом обращении в каждом классе - нужно делать явные полиморфные методы Get и Set.
              Эээ, а геттер и сеттер это что? :)

              UPD: А тьфу, вы же с шарпика пришли. Так вот, в жабе, в отличие от шарпа, нет свойств. И геттер и сеттер это самые обычные методы, ничем не отличающиеся от других.
              Ответить
              • горькая java и сладкий шарп)
                Ответить
              • а в шарпе есть какое-то принципиальное (кроме синтаксиса конечно) отличие свойств от отдельных гет/сет методов?
                Ответить
                • Они явно не вызываются

                  private int _ineg;
                  public int Ineg
                  {
                  get { return _ineg+5; }
                  set { _ineg = value; }
                  }

                  var a = Ineg - вызывается геттер
                  Ineg = 10 - вызывается сеттер

                  На этом - все
                  Ответить
                  • Ну и не получится из отделить и полиморфнуть только set или гет
                    Ответить
                    • А целиком свойство можно перегружать?
                      Ответить
                      • Да
                        Ответить
                        • Важно упомянуть, что свойства также позволяют получить геттер и сеттер по умолчанию.
                          public int foo { get{} set {} }
                          (или как-то так). Тогда поле private int _foo; описывать явно не нужно, но оно создастся автоматически. А если всё же описать такое поле явно, то будут коры с конфликтами имён. Это ж шарп.
                          Вот такое автоматическое свойство можно создать у предка, а после перегрузить. Кода сэкономится пару строк.
                          Ответить
          • А я сначала хотел поспорить, но потом перечитал и... да, бред.
            Ответить
        • Я всякую херню всегда читаю по диагонали, даже не глядя на сниппеты кода. Вот наткнулся на фразу "ожидаемое обращение к методам экземпляра подкласса, вызывающее в свою очередь обращение к полю подкласса", и подумал, что он где-то выше написал субкласс с перегруженным геттером и сеттером...

          Челу стоит дополнить свой ответ кодом сабкласса, в котором перегружены геттер и сеттер, тогда будет более-менее верно ;)
          Ответить
    • нет, налицо более тяжёлые наркотики и сезонные осложнения нубизма.
      Ответить
    • Мне показалось, что этот кто-то начитался Java Puzzlers. Если плевать на правила, то таких глюков можно поймать, что 2*2==5 будет.
      Ответить

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