ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Метод Mutator в Java

Метод Mutator в Java

В английском словаре Mutator означает иметь новую форму. Итак, Mutator, хотя и не найден в английском словаре, означает нечто, вызывающее изменение в новую форму. Частная переменная — это поле или свойство класса в Java. В Java нет предопределенного метода, называемого Mutator. Вместо этого Mutator — это метод в классе, и этот метод предназначен для изменения значения частной переменной класса. По соглашению программист должен начинать имя метода с «set». Таким образом, метод может быть чем-то вроде setAge(), setPrice(), setName() и т. д.

 

Разница между частной и общедоступной переменной

Закрытая переменная видна только членам (свойствам и методам) внутри определения класса. Его нельзя увидеть кодом вне определения класса. С другой стороны, общедоступная переменная может быть видна кодом вне определения класса. Код вне класса может просто изменить общедоступную переменную класса, присвоив новое значение, используя имя класса, если метод является статическим, или используя имя объекта, если метод не является статическим. С общедоступной переменной смысла мутации на самом деле нет. Но когда класс изменяет свое собственное значение, которое не может быть изменено извне, это называется трансформацией, в которой лучше понимается мутация.

 

Иллюстрация Mutator

Не каждому классу нужен Mutator. Однако, когда Mutator необходим для частной переменной (свойства), метод Mutatorа, который является членом класса, должен начинаться с «set». Затем программист определяет метод Mutatorа.

Любой объект в магазине может быть определен классом. Например, хорошая чашка в магазине может быть определена классом. Как минимум, класс будет иметь свойство, которое является ценой чашки, метод Mutatorа и метод доступа. Метод доступа — это метод чтения значения свойства. По соглашению метод доступа должен начинаться с «get». В данном случае это будет getPrice(). Пусть свойство с названием price будет частным. Если цена является общедоступной, то нет необходимости в Mutatorе и аксессоре, так как значение может быть установлено или получено (прочитано) публично.

Следующее определение класса предназначено для чашки (добавлено дополнительное свойство (поле) для валюты):

    class Cup {
        private double price = 2.0;
        private Character currency = '$';
        public void setPrice(Double dbl) {
            price = dbl;
        }
        public double getPrice() {
            return price;
        }
    }

 

Mutator setPrice() является общедоступным, поэтому к нему можно получить доступ из кода вне класса. Сделать Mutator общедоступным не означает сделать общедоступным соответствующее свойство. Соответствующее свойство должно быть частным. У Mutatorа здесь есть аргумент dbl, который является новой ценой. При изменении рыночных условий меняется и цена в магазине. Если бы цена была общедоступной, не было бы необходимости в Mutatorе setPrice(), поскольку код вне класса мог бы изменить цену. Поскольку setPrice является членом класса, он может видеть значение цены частного свойства. Однако код вне класса не может видеть это свойство. Это по дизайну.

Аксессор getPrice() является общедоступным, поэтому к нему можно получить доступ из кода вне класса. У него нет аргументов. Если бы цена была общедоступной, не было бы необходимости в методе доступа getPrice(), поскольку код вне класса мог бы прочитать цену. Поскольку getPrice является членом класса, он может видеть значение цены частной собственности. Однако код вне класса не может видеть это свойство. Это по дизайну.

Mutator setCurrency() и метод доступа getCurrency() могут быть аналогичным образом написаны для закрытой переменной currency.

Следующий основной класс и основной метод получают доступ к частной переменной price, изменяют переменную, а затем снова обращаются к переменной; все это после создания экземпляра класса:

    public class TheClass {
        public static void main(String[] args) {
            Cup cup1 = new Cup();
            double firstPrice = cup1.getPrice();
            System.out.print(firstPrice); System.out.print(", ");

            cup1.setPrice(3.0);

            double secondPrice = cup1.getPrice();
            System.out.print(secondPrice);
            System.out.println();
        }
    }

 

Результат:

   2.0, 3.0

 

Первый сегмент кода в основном методе создает экземпляр объекта Cup (cup1) и получает доступ к цене частного свойства через методы доступа getPrice() и cup1. Затем он распечатывает эту первую цену с запятой и пробелом.

Второй сегмент кода представляет собой сегмент кода из одной строки. Он изменяет цену частной собственности с помощью Mutatorа setPrice() и cup1. Третий сегмент кода считывает и печатает новую цену.

 

Проверка

Пользователь программы должен установить новую цену как двойную. Но что, если он введет какой-то другой тип данных? Новая цена должна быть подтверждена, если она действительно двойная. Код строки для этого случая должен выглядеть следующим образом:

            boolean bl = dbl instanceof Double;

 

Оператор instance of возвращает true, если его левый операнд является экземпляром правого операнда; ложно в противном случае.

При проверке определение метода Mutatorа должно быть:

        public void setPrice(Double dbl) {
            if (dbl instanceof Double)
                price = dbl;
            else
                System.out.println("New Price could not be set!");
        }

 

То есть, если входной dbl имеет тип Double, то цена меняется. Если это не так, выдается сообщение об ошибке, и программа продолжает работу. Обратите внимание, что «d» для double в этом сегменте кода — это «D», а не «d».

Аналогичный код для проверки того, является ли валюта символом, можно записать следующим образом:

        public void setCurrency(Character ch) {
            if (ch instanceof Character)
                currency = '€';
            else
                System.out.println("New currency is not a character!");
        }

 

То есть, если ввод ch имеет тип Character, то валюта изменяется с $ на ‘€’. Если это не так, выдается сообщение об ошибке, и программа продолжает работу. Обратите внимание, что «c» для символа в этом сегменте кода — это «C», а не «c».

 

Заключение

В Java нет предопределенного метода в качестве Mutatorа. Mutator кодируется программистом. Mutator — это просто закодированный (общедоступный) метод, который изменяет приватное значение поля (свойства) класса. С другой стороны, метод доступа — это просто закодированный (общедоступный) метод, который считывает частное значение поля (свойства) класса.

Спасибо, что прочитали нашу статью. Оставьте комментарий о своих мыслях и прочитайте другие статьи, которые лучше всего соответствуют идеям, которые вы ищете.

Exit mobile version