Enum 或 int 表示支付频率

Mar*_*M J 5 java enums

所以我有以下课程..

public abstract class Insurance {
    private int yearlyPremium;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想要一个字段来表示一个人支付保险的频率,可以是枚举,也可以是整数。

这是我对枚举的想法:

public enum PaymentFrequency {
    MONTHLY("Monthly", 12),
    QUARTERLY("Quarterly", 4),
    SEMIANNUALLY("Semiannually", 2),
    ANNUALLY("Annually", 1);

    private String name;
    private int paymentsPerYear;

    PaymentFrequency(String name, int paymentsPerYear) {
        this.name = name;
        this.paymentsPerYear = paymentsPerYear;
    }

    public String getName() {
        return name;
    }

    public int getPaymentsPerYear() {
        return paymentsPerYear;
    }
}
Run Code Online (Sandbox Code Playgroud)

枚举的另一个优点是我可以使用它的values(静态) 和getName方法为用户界面生成下拉菜单,这样如果我添加一个新的PaymentFrequency,我将不必更改下拉菜单。

这是枚举的工作,还是我在这里过于复杂?该字段可以用一个简单的 int 表示,但缺点是我必须检查它是否是一个有效的数字,因为我只想要 1 到 12 之间的值(包含两者),这样12 % n == 0.

Lel*_*ton 4

糟糕代码的标志之一是幻数。代码中出现的数字,但没有记录该数字为何存在的原因(为什么是 12 而不是 11?)。

枚举几乎总是超出您的需要,但它们几乎总是正确的选择。如果您需要向此类添加功能,那真的很容易做到。创建一个方法真的很容易public Date getNextPaymentDate(Date lastPaymentDate)

拥有一个易于扩展的类可以使您的代码更易于维护。