java - 在构造函数中调用方法是一种好习惯吗?
问题描述
我有以下类,我想在其中自动生成溢价值:
public class MedicalPolicy implements PolicyType {
private int id;
private LocalDate effective;
private LocalDate expiry;
private String policyNo;
private double premium;
private ArrayList<Beneficiary> beneficiaries;
public MedicalPolicy(LocalDate effective,LocalDate expiry,ArrayList<Beneficiary> beneficiaries){
this.id=0;
this.effective=effective;
this.expiry=expiry;
this.beneficiaries=beneficiaries;
this.premium=getPremiumByCalculation();
this.policyNo= Integer.toString(LocalDate.now().getYear()) + "-Medical-" + Integer.toString(id);
}
private double getPremiumByCalculation(){
//do some calculation based on some criteria
}
}
像我一样使用一种方法来计算保费是一种好习惯,还是有更好的方法?
解决方案
不,这是个糟糕的主意
不要在部分构造的对象上调用方法。你可能会认为你可以计算出它已经足够构造,或者如果你查看代码你看到它可能会工作,但是其他所有人都必须进行扣除,然后进行维护。
Swing 做了很多这样的事情,而且一团糟。导致各种NullPointerException
s。
当然要考虑一个方法,但不要让它成为同一个实例的实例方法。这段代码的一个特殊问题是它看起来premium
需要随着每次更改而更新,这将非常脆弱。
推荐阅读
- python - 修改 django-activity-stream 生成的模型
- javascript - VueJS 不使用环境变量
- azure - 分离应用程序网关
- javascript - 无法使用 JQuery 隐藏更改的元素
- tfs - azure devops 跨域
- javascript - 悬停时打开菜单而不是使用 jQuery 单击
- list - 如何计算飞镖地图列表中元素的出现次数?
- css - Angular 材质 mat-form-field 有效颜色
- react-native - 如何在 React-Navigation 5 中定义不同的导航流组
- unit-testing - 为 amazonSNS.publish() 编写测试用例时出错