Подтвердить что ты не робот

Использование геттеров в методах класса

Если у вас есть класс с некоторыми свойствами get/set, есть ли причина использовать геттеры в методах класса, или вы должны просто использовать переменные частного члена? Я думаю, что может быть больше аргументов над сеттерами (логика проверки?), Но мне интересно только о получении.

Например (в Java) - есть ли причина использовать параметр 2?:

public class Something
{
    private int messageId;
    public int getMessageId() { return this.messageId; }
    public void setMessage(int messageId) { this.messageId = messageId; }

    public void doSomething()
    {
        // Option 1:
        doSomethingWithMessageId(messageId);

        // Option 2:
        doSomethingWithMessageId(getMessageId());
    }
}
4b9b3361

Ответ 1

Java-программисты в целом, как правило, очень согласуются с использованием методов getter. Я программирую несколько языков, и я не согласен с этим;)

Я бы сказал, до тех пор, пока вы не используете getter, нормально использовать необработанную переменную - для частных переменных. Когда вы создаете геттер, вы должны использовать только это. Когда я создаю getter для частного поля, моя среда IDE предлагает, чтобы она автоматически заменила исходные поля для меня, когда я вводил getter. Переключение на использование геттера - всего несколько нажатий клавиш (и без каких-либо ошибок), поэтому я стараюсь задерживать его, пока он мне не понадобится.

Конечно, если вы хотите наполнить, например, getter-injection, некоторые типы проксирования и подклассификации фреймворков, таких как hibernate, вы должны использовать пользовательские геттеры!

Ответ 2

С помощью получателей вы случайно не будете изменять переменные:) Кроме того, если вы используете как getters, так и "raw" переменную, ваш код может запутаться.

Кроме того, если вы используете наследование и переопределили методы getter в дочерних классах, методы getter-use будут работать правильно, тогда как те, которые используют исходные переменные, не будут.

Ответ 3

Если вы используете метод getter везде - и в будущем выполните кодовый поиск по всем вызовам getMessageId(), вы найдете их все, тогда как если бы вы использовали частные, вы можете пропустить некоторые.

Кроме того, если в методе установки есть логическая логика, вам не придется беспокоиться об изменении более чем одного места для нее.

Ответ 4

Если значение, которое вы назначаете для свойства, является известным или подтвержденным значением, вы можете безопасно напрямую использовать приватную переменную. (За исключением, возможно, в некоторых особых ситуациях, где было бы очевидно, почему это было бы плохо.) Делаете вы или нет, это скорее вопрос вкуса или стиля. Это не проблема производительности, так как геттер или сеттер будут встроены в компилятор, если он достаточно прост.

Если значение неизвестно классу, вы должны использовать свойство, чтобы установить его, чтобы вы могли защитить свойство от недопустимых значений.

Здесь пример (в С#):

public class Something {

   private string _value;

   public string Value {
      get {
         return _value;
      }
      set {
         if (value == null) throw new ArgumentNullException();
         _value = value;
      }
   }

   public Something() {
      // using a known value
      _value = "undefined";
   }

   public Something(string initValue) {
      // using an unknown value
      Value = initValue;
   }

}

Ответ 5

Если вы используете геттер, вы гарантируете, что получите значение после того, как любая логика/решения будут применены к нему. Это, вероятно, не ваша типичная ситуация, но когда это так, вы за это спасибо.