首页 > 解决方案 > 在构造函数中调用方法是一种好习惯吗?

问题描述

我有以下类,我想在其中自动生成溢价值:

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
    }
}

像我一样使用一种方法来计算保费是一种好习惯,还是有更好的方法?

标签: javaconstructor

解决方案


不,这是个糟糕的主意

不要在部分构造的对象上调用方法。你可能会认为你可以计算出它已经足够构造,或者如果你查看代码你看到它可能会工作,但是其他所有人都必须进行扣除,然后进行维护。

Swing 做了很多这样的事情,而且一团糟。导致各种NullPointerExceptions。

当然要考虑一个方法,但不要让它成为同一个实例的实例方法。这段代码的一个特殊问题是它看起来premium需要随着每次更改而更新,这将非常脆弱。


推荐阅读