Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java构造函数中计算类属性的约定_Java_Constructor - Fatal编程技术网

Java构造函数中计算类属性的约定

Java构造函数中计算类属性的约定,java,constructor,Java,Constructor,Java中计算类属性的约定是什么 例如,直接在构造函数中进行计算: public class Person { public Person(int birthyear){ this.birthyear = birthyear; this.age = 2020 - birthyear; } } 与调用执行计算的方法相比: public class Person { public Person(int birthyear){

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);
    }    
}
如果计算比较复杂(不像这里),我倾向于使用第二个示例,但如果可能,我希望遵循约定


这可能是重复的,在这种情况下,请为我指出正确的方向(从搜索中找不到)。

实际上没有约定。这取决于计算的复杂性或可读性。 对于一个简单的代码,如<代码> 2020 -出生年份,如果把它放在构造函数中,我会认为它是完全好的。
对于更复杂的情况,我宁愿将其推迟到一种方法但请记住:确保将其设置为私有,否则子类可以访问未完全构造的对象。

对于简单复杂的情况,可以调用私有方法。对于复杂的情况,有更多的选择(构建器、工厂方法等等),也许你也感兴趣。