java - 枚举或整数表示支付频率

标签 java enums

所以我有以下类(class)..

public abstract class Insurance {
    private int yearlyPremium;
    ...
}

我想要一个字段来表示一个人必须多久支付一次保险费,可以是枚举类型,也可以是整数类型。

这是我对枚举的想法:

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

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

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

最佳答案

错误代码的标志之一是魔数(Magic Number)。出现在您的代码中的数字,但没有记录为什么数字在那里(为什么这是 12 而不是 11?)。

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

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

关于java - 枚举或整数表示支付频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30154263/

相关文章:

java 继承多态方法 地下城怪物游戏

java - Dart future 值请求不兼容

java - 从.csv文件中获取的字符编辑问题java

java - 如何使用 Hibernate 从存储过程中检索输出参数

带有存储字段的 Swift 枚举?

xcode - 使用枚举的默认实现扩展协议(protocol)会导致 Xcode 崩溃

java - JPA 实体 (Hibernate) 中的 ENUM 序号

java - Uploadify 不发送文件名

SQL Server case when 或枚举

java - 对扩展现有枚举类型的泛型感到困惑