Соглашение для вычисления атрибута класса в конструкторе Java - PullRequest
2 голосов
/ 25 марта 2020

Какое соглашение для вычисления атрибута класса в Java?

Например, выполнение вычисления непосредственно в конструкторе:

public class Person {
    public Person(int birthyear){
        this.birthyear = birthyear;
        this.age = 2020 - birthyear;
    }    
}

по сравнению с вызовом метода, который выполняет расчет:

public class Person {
    public Person(int birthyear){
        this.birthyear = birthyear;
        this.age = calculateAge(birthyear);
    }    
}

Там, где вычисления сложны (не как здесь), я склонен к go со вторым примером, но хотел бы следовать соглашениям, где это возможно.

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

1 Ответ

1 голос
/ 26 марта 2020

На самом деле нет соглашения. Это скорее зависит от сложности или читабельности расчетов. Для простого, такого как 2020 - birthyear, я бы посчитал, что это было бы прекрасно, если бы он был помещен прямо в конструктор.

В более сложных случаях я бы предпочел отложить его до метода. Но помните: убедитесь, что вы делаете его приватным , иначе подкласс может получить доступ к не полностью сконструированному объекту.

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