В чем разница между методами сеттера и методами конструктора? - PullRequest
3 голосов
/ 17 марта 2019
public class Person
{
    private String name;
    private String streetAddress;
    private String cityStateZip;

    public Person()
    {
        name = "John Doe";
        streetAddress = "55 Main Street";
        cityStateZip = "Anywhere, MA 00001";
    }

    public Person(String n, String s, String c)
    {
        name = n;
        streetAddress = s;
        cityStateZip = c;
    }
    public String getName()
    {
        return this.name;
    }
    public void setName()
    {
    this.name = name;
    }
    public String getStreetAddress()
    {
        return this.streetAddress;
    }
    public void setStreetAddress()
    {
        this.streetAddress = streetAddress;
    }
    public String getCityStateZip()
    {
        return this.cityStateZip;
    }
    public void setCityStateZip()
    {
        this.cityStateZip = cityStateZip;
    }
    public String toString()
    {
        String str =    name + "\n" + streetAddress + "\n" + cityStateZip + "\n";
        return str;
    }

}

В приведенном выше коде я написал класс, который создаст объект person и будет использоваться для создания других классов, которые будут реализовывать этот класс person. Когда я писал этот суперкласс, я думал, в чем разница между методами сеттера и конструкторами? Методы установки просто полезны, потому что вы можете легко сделать .set (methodName) или? Кто-нибудь захочет объяснить разницу между моим конструктором и моим методом сеттера?

Ответы [ 3 ]

3 голосов
/ 17 марта 2019

Setter устанавливает значения атрибутов Objects, которые были созданы ранее.Конструктор в вашем случае создает объект с кучей предопределенных значений.

Class Pizza
Attributes: boolean Extra Cheese , boolean Extra mayonnaise

Ex Constructor Call:

Pizza Margherita = new Pizza(true, false) //sets value of attributes, i.e you want extra cheese or mayonnaise?

Ex setter Call:

Pizza Marinara= new Pizza();
public void setCheese (boolean cheese ) {      //sets the values explictly 
        this.cheese  = cheese ;
    }
public void setMayonnaise (boolean mayonnaise) {
        this.mayonnaise= mayonnaise;             //sets the value explictly
    }

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

Хотя оба имеют разные преимущества ихорошо подходит в экосистеме Java.Если вы хотите иметь неизменный класс, используйте конструктор, в противном случае используйте сеттеры.

Если вы хотите иметь неизменный класс, используйте конструктор, в противном случае используйте сеттеры.

С Setters()или мутаторы предоставляют вызывающей стороне возможность обновить значение определенной переменной экземпляра.


Подробнее:

Конструкторне нужно иметь спецификатор доступа , return тип, в то время как сеттеры должны иметь спецификатор доступа .

2 голосов
/ 17 марта 2019

Инкубационный

  1. Методы установки могут иметь бизнес-логику и проверки для входящих данных. Они служат лучше всего, особенно когда дело доходит до объектов, состояние которых кратковременно или сильно изменяется
  2. Методы установки более полезны, когда вы используете их вместе с методами получения, потому что таким образом он усиливает свойство «Инкапсуляция» ООП в Java. Ваши переменные экземпляра могут быть полностью приватными. Вы даже можете сохранить свой объект также скрытым от внешнего мира. Вы можете проверить частные конструкторы и фабричные методы для вашей справки
  3. Тип возвращаемого значения должен быть указан явно

Конструктор

  1. Он используется только во время создания объекта, поэтому независимо от того, какую логику и проверки вы кодируете, потребуется снова отдельно реализовать их в другом методе обновления данных объекта
  2. У них есть неявный тип возвращаемого значения, поэтому нам не нужно ничего писать. Если мы напишем любой возвращаемый тип, то этот метод не будет считаться конструктором
2 голосов
/ 17 марта 2019

Конструкторы создают новый объект, где в качестве сеттеров создаются для обновления этого объекта.

Итак, предположим, что вас зовут Динг Донг, и вы живете в нем, и вы создаете объект персонажа с вашим именем и следующим адресом.

12345 15th Street
Area 51, Nevada 12345

и вы перемещаете пару кварталов по улице к:

1234 15th Street
Area 51, Nevada 12345

Ну, вам не нужно создавать новый Person объект, потому что вы переехали, вам просто нужно обновитьадрес.Именно здесь вы будете использовать метод установки.

Вывод: сеттеры предназначены для обновления вашей записи, а конструкторы для создания нового объекта Person.

Надеюсь, это поможет !!!!

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