java Enum或int表示支付频率
所以我有以下课程
public abstract class Insurance {
private int yearlyPremium;
...
}
我想要一个字段,它表示一个人必须支付保险费的频率,可以是enum,也可以是int
以下是我对enum的想法:
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;
}
}
enum的另一个优点是,我可以使用它的values
(静态)和getName
方法为用户界面生成下拉菜单,这样,如果我添加一个新的PaymentFrequency
,我就不必再更改下拉菜单了
这是enum的工作,还是我在这里过于复杂?这个字段可以用一个简单的int表示,但缺点是我必须检查它是否是一个有效的数字,因为我只需要1到12之间的值(包括1和12),这样12 % n == 0
# 1 楼答案
坏代码的标志之一是神奇的数字。出现在代码中但未记录的数字为什么会出现(为什么是12而不是11?)
枚举几乎总是超出您的需要,但它们几乎总是正确的选择。如果您需要向这个类添加功能,那么很容易做到这一点。创建一个方法
public Date getNextPaymentDate(Date lastPaymentDate)
真的很容易拥有一个易于扩展的类可以使代码更易于维护