kar*_*kar 4 java constructor encapsulation
我有许多set方法设置并使用构造函数来启动它们的值,如下所示.它正在工作,但我担心它是否是一个普通的Java约定(在构造函数中调用set方法是否正常?).
我能想到的替代方法是调用一个空构造函数并在main方法中逐个调用set方法来设置值.我觉得这第二种方法很乏味.如果我在Java惯例中做得很好/或者有更好的方法,请提供建议.请告诉我是否需要发布更多代码以使我的问题更清晰.如果它更有意义,我可以发布所有内容.谢谢.
public Person(String foreName,String surName, int age, double height, String gender){
personCount++;
setForeName(foreName);
setSurName(surName);
setAge(age);
setHeight(height);
setGender(gender);
}
Run Code Online (Sandbox Code Playgroud)
如果使用this不绕过setter中定义的验证规则,那只是一个品味问题:
public Person(String foreName,String surName, int age, double height, String gender){
personCount++;
this.foreName = foreName;
//same goes for the rest of the params
}
Run Code Online (Sandbox Code Playgroud)
这不仅仅是品味问题.如果方法中没有任何额外的逻辑setXXX(),则约定是直接在构造函数中分配属性:
this.foreName = foreName;
this.surName = surName;
Run Code Online (Sandbox Code Playgroud)
... 等等.但如果是额外的逻辑在setXXX()方法,那么你应该根据需要使用它们.比如,对日志记录逻辑或类似的调用:
public void setForeName(String pForeName) {
log.info("setting new foreName value: " + pForeName);
this.foreName = pForeName;
}
Run Code Online (Sandbox Code Playgroud)
看看最后一行setForeName()是如何与执行直接分配相同的?另请注意,调用a setXXX()可能会有非常非常小的性能成本(最有可能被JIT编译器优化掉).在正常情况下,您应该优化可读性和清晰度,并且恕我直言,使用此处的直接分配是首选方案.
| 归档时间: |
|
| 查看次数: |
7509 次 |
| 最近记录: |